FBSDKLoginManager logInWithReadPermissions:fromViewController:处理程序:完成不调用应用程序第一次运行

我有一个Facebooklogin启用的应用程序,由于某种原因FBSDKLoginManager logInWithReadPermissions: fromViewController: handler:不安装后我的应用程序的第一次运行调用。 如果我只是杀了我的应用程序(即使没有尝试login到Facebook或做任何事情:试图login首先打开或不改变任何东西),并再次打开它,它完美的作品。

为什么?

(我已经检查了传递给方法的视图控制器不是零,是当前的视图控制器)

这是我的login代码:

 +(void)loginWithFacebookWithCompletion:(ULCompletion)completion{ [[[FBSDKLoginManager alloc] init] logInWithReadPermissions:FACEBOOK_READ_PERMISSIONS fromViewController:[ULMasterViewController instance] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if(result.token){ ... } [...] 

剩下的就是不相关的,因为完成块根本不被调用(即使有错误也不会)。 我有硬编码的FACEBOOK_READ_PERMISSIONS

#define FACEBOOK_READ_PERMISSIONS (@[@"user_friends", @"user_birthday", @"email", @"user_photos"])

最后, [ULMasterViewController instance]是有效的(不为零,并在层次结构中的视图(否则它抱怨视图不在hiearchy,也试过))。

这在我的情况下工作。

1,在界面创buildFBloginManager的实例。

 FBSDKLoginManager *manager 

2.在ViewDidLoad中初始化。

 manager = [FBSDKLoginManager new] 

3,最后使用FBLoginManager的这个实例调用login权限方法。

我遇到了这个确切的问题,这是非常令人沮丧的。 解决这个问题的关键是我的应用程序代码正在制作大量同时存在的FBSDKLoginManager对象。 重构我的代码以使用单例共享实例(而不是在[FBSDKLoginManager new]的地方运行[FBSDKLoginManager new] )为我消除了这个bug /问题。

神秘地,我从来不明白为什么这个工作。 我使用debugging器来追踪FBSDK代码,而我发现的唯一(非常)神秘的问题是,在loginWithReadPermissions方法中,即使传递了非零值, fromViewController参数也被设置为nil奇怪

这没什么关系,但是尝试通过单独创buildFBSDKLoginManager对象来完成,因为我已经完成了同样的工作。

 FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];