iOS Facebook 登录“object nil”崩溃

Posted

技术标签:

【中文标题】iOS Facebook 登录“object nil”崩溃【英文标题】:iOS Facebook Login "object nil" crash 【发布时间】:2013-08-27 20:29:49 【问题描述】:

使用适用于 ios 的 Facebook 3.7,用于应用程序的身份验证。它有 70% 的时间工作,其他 30% 的时间会崩溃。似乎与是否连接互联网无关。在下面的第一个方法 - populateUserDetails 中,我检查字典是否为 nil,我认为这会阻止这个问题,但它仍然会发生。

这是我的错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: 0_auth_logger_id)'

这是我的验证码:

- (void)populateUserDetails

if (FBSession.activeSession.isOpen) 
    [[FBRequest requestForMe] startWithCompletionHandler:
     ^(FBRequestConnection *connection,
       NSDictionary<FBGraphUser> *user,
       NSError *error) 
         if (!error || ![user isEqualToDictionary: nil]) 
             // if (!error) 
             self.userNameLabel.text = [user objectForKey:@"email"];
             email = [user objectForKey:@"email"];
             //      self.userProfileImage.profileID = user.id;

             if ([facebookUser isEqualToString:@"yes"])
             [self appendAndSaveData];
             [self performSegueWithIdentifier:@"segueIntroScreenLogin" sender:self];
             

         
     ];



-(void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];

if (FBSession.activeSession.isOpen) 
[self populateUserDetails];



-(void)logoutButtonWasPressed:(id)sender 
[FBSession.activeSession closeAndClearTokenInformation];



- (IBAction)performLogin:(id)sender

 facebookUser = @"yes";
 NSLog(@"IntroScreen, email: %@", email);
 AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
 [appDelegate openSession];

    if([email length] >0)

     [self appendAndSaveData];
     [self performSegueWithIdentifier:@"segueIntroScreenLogin" sender:self];
 

【问题讨论】:

【参考方案1】:

虽然您的代码中似乎没有引用在 NSMutableDictionary 中设置值,但终止消息可能是指您不能将 nil 作为键传递给 setObject:forKey: 方法这一事实。发布堆栈跟踪会有所帮助,但在这种情况下,请查找对 setObject:forKey 的调用并验证 forKey 参数是否为非零。

【讨论】:

这有帮助。我认为我似乎是在打开会话之前多次单击 IBAction。如果我给它时间,它似乎工作正常。我包括了一个微调器来发出信号。【参考方案2】:

试试这个:

    在您喜欢的编辑器中打开:

    [facebook_sdk_folder]/src/FBSession.m
    

在第 930-940 行附近,您会发现以下代码

if (permissions != nil) 
  NSString* scope = [permissions componentsJoinedByString:@","];
  [params setValue:scope forKey:@"scope"];

改成

if (permissions != nil) 
  NSString* scope = [permissions componentsJoinedByString:@","];
  if( scope )  // << add this line
    [params setValue:scope forKey:@"scope"];

然后再次重建框架

[facebook_sdk_folder]/scripts/build_framework.sh

(确保 [facebook_sdk_folder]/build/FacebookSDK.framework 中新生成的框架是您项目中包含的框架)

【讨论】:

如何从 SDK 访问代码?没关系..github.com/facebook/facebook-ios-sdk

以上是关于iOS Facebook 登录“object nil”崩溃的主要内容,如果未能解决你的问题,请参考以下文章

更新到 IOS 9 后无法登录 Facebook

Facebook 通过 ios 中的社交框架登录

facebook-ios-sdk 是不是使用 iOS 6 Facebook 集成来支持登录而不打开本机 Facebook 应用程序?

iOS Facebook SDK:哪个登录系统更好?

iOS:Facebook 登录错误

无法在 iOS 上使用 Facebook 登录