2012-06-15 24 views
-1

我很新的目標C.我跟着教程整合Facebook到iOS應用程序,沒有別的。當我添加註銷按鈕的代碼的東西后,我跑了它,它給了我一個錯誤在線: [self.viewController.view addSubview:logoutButton]; 錯誤是「無法識別選擇器發送到實例0x6b6c550」。 我知道這可能是一個愚蠢的錯誤,但如果任何人都可以指出我錯在哪裏,我將非常感激!Facebook教程添加註銷按鈕,但空白屏幕

static NSString* kAppId = @"340105106048288"; 


// Method that gets called when the sign out button is clicked 
- (void)logoutButtonClicked { 
    [facebook logout]; 
} 



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions 
    (NSDictionary *)launchOptions 
{ 

UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
logoutButton.frame = CGRectMake(40, 40, 200, 40); 
[logoutButton setTitle:@"Log Out" forState:UIControlStateNormal]; 
[logoutButton addTarget:self action:@selector(logoutButtonClicked) 
     forControlEvents:UIControlEventTouchUpInside]; 
[self.viewController.view addSubview:logoutButton]; 


facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:self]; 
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults 
    objectForKey:@"FBExpirationDateKey"]) { 
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
} 
// This part, the authorize method will bring you to the authorization page 
if (![facebook isSessionValid]) 
    [facebook authorize:nil]; 


    return YES; 
} 



// Pre iOS 4.2 support 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [facebook handleOpenURL:url]; 
} 

// For iOS 4.2+ support 
- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
    annotation:(id)annotation { 
    return [facebook handleOpenURL:url]; 
} 

// Save the user credential, specifically the access token and the expiration date to the user defaults 
- (void)fbDidLogin { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
[defaults synchronize]; 
} 


- (void) fbDidLogout { 
// Remove saved authorization information if it exists 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults objectForKey:@"FBAccessTokenKey"]) { 
    [defaults removeObjectForKey:@"FBAccessTokenKey"]; 
    [defaults removeObjectForKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 
} 
} 

回答

0

如果您在您的logoutButton上使用IB,請檢查您是否已將其鏈接到接口構建器中的對象(xib)。讓我知道如果錯誤仍然發生。

[編輯]

[self.viewController.view addSubview:logoutButton]; 

將無法​​正常工作。你正在使用故事板,對吧?生成的初始值通常不包含屬性中的「viewController」。你只能看到「窗口」。沒有viewController的實例可能是錯誤的原因。

一條建議,爲什麼你不在ViewController中實現整個事物,而只是在必要時使用委託,而不是。

順便說一句,請顯示該Facebook教程的鏈接,所以我可以向你解釋它應該如何實施。

+0

我剛剛創建了一個使用故事板的新項目。我沒有更改viewcontroller.h和.m文件中的代碼。我需要在那裏做任何事嗎?或者我應該添加一些更多的appDelegate文件?非常感謝你的幫助! –

+0

您是否已將Facebook API集成到您的新項目中?在包含Facebook API之前和之後運行您的項目,並且不使用註銷按鈕。 無法識別的選擇器通常是由以下原因造成的: 1.對象的錯誤實例(例如控制器) 2.您的方法未被調用。可能是因爲你在使用IBAction,無法將它鏈接到你的對象。也可能是你在調用一個未聲明的方法或對象。 – Kimpoy

+0

我已經包含了api,並且在註銷按鈕步驟之前一切正常。我也可以看到授權頁面。我只是按照教程中的步驟創建項目。在註銷按鈕步驟之前,我是否需要執行其他任何操作? –