iOS Facebook SDK在撤消应用程序权限后崩溃应用程序

我有Facebook SDK的问题.在我的应用程序中,我有可能通过Facebook图形请求从用户的Facebook帐户中删除该应用程序:

        NSString *graphPath = [NSString stringWithFormat:@"/%@/permissions", [FBSDKAccessToken currentAccessToken].userID];
    [[[FBSDKGraphRequest alloc] initWithGraphPath:graphPath parameters:nil HTTPMethod:@"DELETE"]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
         if (!error) {
             NSLog(@"Facebook removed");
         } else {
             NSLog(@"Facebook error: %@", error);
         }
     }];

一切正常,但如果我尝试使用FBSDKLoginManager上的logInWithReadPermissions再次登录,Safari会出现,我点击“Contiune”来授权应用程序,它崩溃并出现错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[3]'

当我再次启动应用程序后尝试登录时,一切正常.

你有什么线索,这可能是什么原因?

更新:

FBSDKCoreKit文件之一(即FBSDKTimeSpentData.m)中的一个例外发生在149-155行,我们有:

NSDictionary *timeSpentData =
  @{
    FBSDKTimeSpentPersistKeySessionSecondsSpent : @(_secondsSpentInCurrentSession),
    FBSDKTimeSpentPersistKeySessionNumInterruptions : @(_numInterruptionsInCurrentSession),
    FBSDKTimeSpentPersistKeyLastSuspendTime : @(now),
    FBSDKTimeSpentPersistKeySessionID : _sessionID,
    };

_sessionID是零
此变量初始化为

- (void)instanceRestore:(BOOL)calledFromActivateApp

方法,可以通过调用在app中调用

[FBSDKAppEvents activateApp]

但是在instanceRestore:方法中有一个条件

if (!_isCurrentlyLoaded) {
//
}

这是不符合的,因此没有设置_sessionID.

最佳答案 Facebook iOS库中有一个错误.请更新Facebook SDK库.在FBSDKLoginKit(4.13.1)中,此错误已得到修复.

点赞