在 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 模拟器上显示不同的颜色
加速度计 didAccelerate 委托方法未在 iOS sdk 6.0 中调用
对 iOS 5.0 和 iOS 6.0 使用 XCode 4.5 的困惑