2012-08-19 162 views
1

我一步一步跟着Facebook上的Facebook SDK教程。除了fbDidLogin被調用之外,我還有一些工作...授權過程正常工作。有人告訴我做:IOS - Facebook SDK fbDidLogin未調用 - 初始化視圖控制器。

 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
      return [[controller facebook] handleOpenURL:url]; 
    } 

fbDidLogin not called

問題是,我不完全知道如何初始化頁頭我的視圖控制器。這裏是我的應用程序的委託.H:

#import <UIKit/UIKit.h> 
#import "FBConnect.h" 


@interface fb2AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate> { 

    Facebook *facebook; 
    UIViewController *fb2ViewController; 
} 

@property (strong, nonatomic) UIWindow *window; 
@property (strong,nonatomic) Facebook *facebook; 
@property (nonatomic, strong) UIViewController *fb2ViewController; 

@end 

與.m:

#import "fb2AppDelegate.h" 

@implementation fb2AppDelegate 
@synthesize window = _window; 
@synthesize facebook; 
@synthesize fb2ViewController; 


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

    self.fb2ViewController = [[UIViewController alloc] init]; 

    facebook = [[Facebook alloc] initWithAppId:@"key_here" andDelegate:self]; 


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    if (![facebook isSessionValid]) { 
     [facebook authorize:nil]; 
    } 


    return YES; 
} 


- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [[fb2ViewController facebook] handleOpenURL:url]; 
} 


- (void)fbDidLogin { 

    NSLog(@"fbdidlogin"); 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
            @"key_here", @"app_id", 
            @"http://developers.facebook.com/docs/reference/dialogs/", @"link", 
            @"http://fbrell.com/f8.jpg", @"picture", 
            @"Facebook Dialogs", @"name", 
            @"Reference Documentation", @"caption", 
            @"Using Dialogs to interact with users.", @"description", 
            nil]; 

    [facebook dialog:@"feed" andParams:params andDelegate:self]; 

} 

作爲視圖控制器...我還沒有把任何代碼在其中。

,我收到的錯誤是:

爲「UIViewController的」沒有明顯的@interface聲明選擇「Facebook的

我到底做錯了什麼?

thx!

+0

你是什麼意思的第二個版本的實施? – stackOverFlew 2012-08-19 05:42:32

+0

雖然...不起作用,但...給出以下錯誤: 不可見@interface for'UIViewController'聲明選擇器'Facebook'=( – stackOverFlew 2012-08-19 05:50:00

+1

[iphone SSO Facebook實現]的可能重複(http:// stackoverflow .com/questions/10403697/iphone-sso-facebook-implementation) – CodaFi 2012-08-19 05:51:55

回答

2

好吧,你需要做的:

[facebook handleOpenURL:url]. 

您正在用facebook的選擇,而不是一個對象。

另外..你需要設置facebook.sessionDelegate = self,這樣委託方法fbDidLogin可以被調用。

希望這會有所幫助!

+1

+1,這個小時的男人! – CodaFi 2012-08-19 06:12:35

+0

@ user1392515感謝您給我正確的答案。我並沒有真正希望你說實話。我只是喜歡在Im 100%確信它解決了你的問題之前不回答,因爲它可能會阻止其他人在你已經回答的時候閱讀你的問題。 – 2012-08-19 06:26:18

+0

@CodaFi同樣適用於你:) – 2012-08-19 06:26:35

2

問題是,運行時認爲你的UIViewController具有類方法+ facebook,實際上,這是一個單例使用另一個問題的答案(相當容易混淆,我可能會添加)。您需要將其發送到Facebook 對象的實例,並從那裏調用您的代碼。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
     return [facebook handleOpenURL:url]; 
} 

還請記住,爲了委託方法被調用,您的對象實際上必須是一個委託。因此請設置facebook.sessionDelegate = self,並使用<FBSessionDelegate>標頭中的協議來使編譯器警告無效。

+0

thx爲答案!首先嚐試,沒有發生任何事......我的意思是說,當然有意義..但fbDidLogin永遠不會被調用... – stackOverFlew 2012-08-19 06:01:29

+0

你知道爲什麼...? – stackOverFlew 2012-08-19 06:03:35

+1

當然不是,傻了。你不是這個東西的'sessionDelegate'! – CodaFi 2012-08-19 06:04:21

相關問題