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”崩溃的主要内容,如果未能解决你的问题,请参考以下文章
facebook-ios-sdk 是不是使用 iOS 6 Facebook 集成来支持登录而不打开本机 Facebook 应用程序?