Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios FBSDKLoginManager LOGINWITHREADPERCESSIONS:fromViewController:处理程序:未在应用程序首次运行时调用完成_Ios_Facebook_Facebook Login_Ios10_Fbsdkloginkit - Fatal编程技术网

Ios FBSDKLoginManager LOGINWITHREADPERCESSIONS:fromViewController:处理程序:未在应用程序首次运行时调用完成

Ios FBSDKLoginManager LOGINWITHREADPERCESSIONS:fromViewController:处理程序:未在应用程序首次运行时调用完成,ios,facebook,facebook-login,ios10,fbsdkloginkit,Ios,Facebook,Facebook Login,Ios10,Fbsdkloginkit,我有一个启用Facebook登录的应用程序,由于某些原因,安装后第一次运行我的应用程序时不会调用带有ReadPermissions:fromViewController:handler:的FBSDKLoginManager登录。如果我只是关闭了我的应用程序(即使没有尝试登录Facebook或做任何事情:尝试先登录或不登录都不会改变任何事情),然后再打开它,它会工作得很好 为什么? (我已经检查了传递给方法的视图控制器不是nil,而是当前的视图控制器) 这是我的登录码: +(void)loginW

我有一个启用Facebook登录的应用程序,由于某些原因,安装后第一次运行我的应用程序时不会调用带有ReadPermissions:fromViewController:handler:的FBSDKLoginManager登录。如果我只是关闭了我的应用程序(即使没有尝试登录Facebook或做任何事情:尝试先登录或不登录都不会改变任何事情),然后再打开它,它会工作得很好

为什么?

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

这是我的登录码:

+(void)loginWithFacebookWithCompletion:(ULCompletion)completion{
    [[[FBSDKLoginManager alloc] init] logInWithReadPermissions:FACEBOOK_READ_PERMISSIONS fromViewController:[ULMasterViewController instance] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
        if(result.token){
          ...
        }
[...]
其余部分与此无关,因为根本不调用完成块(即使有错误也不调用)。我已经获得了
FACEBOOK\u READ\u权限
硬编码:

#定义FACEBOOK的阅读权限(@[@“用户朋友”、“用户生日”、“电子邮件”、“用户照片”)


最后,
[ULMasterViewController实例]
是有效的(不是空的,它的视图在层次结构中(否则它会抱怨视图不在层次结构中,也会尝试这样做))。

这在我的案例中起作用

1.在接口中创建FBloginManager实例

FBSDKLoginManager *manager
2.在ViewDidLoad中初始化

manager = [FBSDKLoginManager new]

3.最后使用FBLoginManager的此安装调用登录权限方法。

这在我的案例中有效

1.在接口中创建FBloginManager实例

FBSDKLoginManager *manager
2.在ViewDidLoad中初始化

manager = [FBSDKLoginManager new]

3.最后使用此安装的FBLoginManager调用login permission方法。

这没有多大关系,但请尝试单独创建FBSDKLoginManager对象,就像我为自己做的一样

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

这没有多大关系,但请尝试单独创建FBSDKLoginManager对象,就像我为自己做的一样

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
我遇到了这个问题,非常令人沮丧。修复它的关键在于我的应用程序代码生成了大量并发存在的FBSDKLoginManager对象。对代码进行重构以使用单例共享实例(而不是到处运行
[FBSDKLoginManager new]
)为我消除了这个bug/问题

奇怪的是,我一直不明白为什么会这样。我使用调试器跟踪FBSDK代码,我发现唯一(非常)神秘的问题是,在
loginWithReadPermissions
方法中,
fromViewController
参数被设置为
nil
,即使我传入了一个非
nil
值。奇怪…

我遇到了这个确切的问题,非常令人沮丧。修复它的关键在于我的应用程序代码生成了大量并发存在的FBSDKLoginManager对象。对代码进行重构以使用单例共享实例(而不是到处运行
[FBSDKLoginManager new]
)为我消除了这个bug/问题


奇怪的是,我一直不明白为什么会这样。我使用调试器跟踪FBSDK代码,我发现唯一(非常)神秘的问题是,在
loginWithReadPermissions
方法中,
fromViewController
参数被设置为
nil
,即使我传入了一个非
nil
值。奇怪…

您是否编写了-(BOOL)应用程序:(UIApplication*)应用程序openURL。。。方法在appdeligate.m文件中?@SatishMavani是。它有适当的调用FBSDKLoginManager的功能,但在任何情况下都没有调用它(无论是在第一次运行“失败”时,还是在第二次运行成功登录时),您是否创建了使用facebook按钮登录的自定义操作?@SatishMavani您确切的意思是什么?我的意思是,您是否使用FBSDKLoginButton登录facebook?您是否编写了-(BOOL)应用程序:(UIApplication*)应用程序openURL。。。方法在appdeligate.m文件中?@SatishMavani是。它有适当的调用FBSDKLoginManager的功能,但在任何情况下都没有调用它(无论是在第一次运行“失败”时,还是在第二次运行成功登录时),您是否创建了使用facebook按钮登录的自定义操作?@SatishMavani您确切的意思是什么?我的意思是,你使用FBSDKLoginButton登录facebook了吗?哦,你的意思是在类范围内初始化实例,是的,成功了。哦,你的意思是在类范围内初始化实例,是的,成功了。我认为这不仅仅是单独创建,而是在类/全局范围内创建,而不是在方法范围内创建。可能Facebook SDK对manager的引用较弱,函数返回时就会发布,因此在回调时为零。我认为这不是单独创建,而是在类/全局范围创建,而不是在方法范围创建。可能,facebooksdk对manager的引用很弱,函数返回时就会释放它,因此在回调时为零。