我有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)中,此错误已得到修复.