在 iOS 6.0 和 iOS 6.0.1 上调用 [FBSession openActiveSessionWithPermissions...] 时从 ACAccountStore 抛出 NSInv

Posted

技术标签:

【中文标题】在 iOS 6.0 和 iOS 6.0.1 上调用 [FBSession openActiveSessionWithPermissions...] 时从 ACAccountStore 抛出 NSInvalidArgumentException【英文标题】:NSInvalidArgumentException thrown from ACAccountStore when calling [FBSession openActiveSessionWithPermissions...] on iOS 6.0 and iOS 6.0.1 【发布时间】:2012-11-10 08:50:44 【问题描述】:

使用 Facebook ios SDK 3.1.1,我正在使用此调用执行登录 -

NSArray *permissions = [[NSArray alloc] initWithObjects: @"email", @"user_birthday", @"user_location", nil];

@try 
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                             FBSessionState state,
                                                             NSError *error) 
                                             [self sessionStateChanged:session
                                                                 state:state
                                                                 error:error];
                                         ];

@catch  ... 

在极少数情况下,此方法抛出 NSInvalidArgumentException 并带有消息 Access options are not permitted for this account type. The options argument must be nil.,这是从 [ACAccountStore requestAccessToAccountsWithType:options:completion:] 抛出的。

查看 Apple 的 ACAccountStore 文档,我看到了该方法的评论:

“某些帐户类型(例如 Facebook)需要选项字典。如果未为此类帐户类型提供选项字典,则此方法将抛出 NSInvalidArgumentException。相反,如果帐户类型不需要选项字典,则选项参数必须为零。”

除了 Facebook,Apple 要求它为零,但这个方法是从 Facebook 调用的,所以也许这是一个错误 - 无论是在 Facebook 还是在 iOS 6.0/.1,但我在网上找不到任何关于这个问题。

有什么想法吗?

【问题讨论】:

我有一个具有相同跟踪的崩溃日志。你有没有解决这个问题?提前致谢! 不,目前我只是捕捉到异常并忽略它。 这个问题你解决了吗? 【参考方案1】:

我找到了解决此错误的方法。请注意,此处也描述了该错误:https://developers.facebook.com/bugs/139251032898548

Facebook SDK 不会对 accountTypeWithAccountTypeIdentifier 的返回值进行空检查。见https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBSystemAccountStoreAdapter.m?source=c#L176

要解决此问题,您可以在尝试使用 facebook lgoin 之前进行以下检查:

if ([[[ACAccountStore alloc]init] accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"] == nil) 
   NSLog(@"Cannot proceed, not facebook account type identifier");
   return;

【讨论】:

但如果 Facebook 没有帐户存储,我希望它通过其他方法(单点登录等)进行 Facebook 登录,而不是失败 我使用 3.5.2 看到了这个异常,它确实检查了:github.com/facebook/facebook-ios-sdk/blob/sdk-version-3.5.2/src/…

以上是关于在 iOS 6.0 和 iOS 6.0.1 上调用 [FBSession openActiveSessionWithPermissions...] 时从 ACAccountStore 抛出 NSInv的主要内容,如果未能解决你的问题,请参考以下文章

UIToolbar 在 ios 5.0 和 ios 6.0 模拟器上显示不同的颜色

XCode 4.5 iOS 6.0 模拟器和旋转问题

加速度计 didAccelerate 委托方法未在 iOS sdk 6.0 中调用

对 iOS 5.0 和 iOS 6.0 使用 XCode 4.5 的困惑

IBM Worklight 6.0 - iOS 应用程序总是停留在第二次启动

ios 6.0 版不推荐使用最小字体大小