Facebook 3.7 for iOS、App の認証に対応。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];
}
}