2012-11-10 77 views
11

與Facebook的iOS SDK 3.1.1,我進行登錄時NSInvalidArgumentException從ACAccountStore拋出 -使用此電話呼叫[FBSession openActiveSessionWithPermissions ...]在iOS 6.0和iOS 6.0.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:]拋出。

檢查的ACAccountStore蘋果的文檔,我看到那個方法此評論:

「某些帳戶類型(如Facebook)需要一個選項字典如果不提供此方法將拋出NSInvalidArgumentException選項字典對於這種賬戶類型,相反,如果賬戶類型不需要選項字典,則options參數必須爲零。「

蘋果要求這是除了Facebook之外的零,但這種方法是從Facebook調用,所以也許這是一個錯誤 - 無論是在Facebook或iOS 6.0/.1,但我無法找到任何網絡上關於這個問題。

任何想法?

+0

我有具有相同跟蹤創建系統崩潰。你有沒有解決這個問題?提前致謝! –

+0

不,目前我只是發現異常而忽視它。 – Kof

+0

你解決了這個問題嗎? – vburojevic

回答

4

我找到了解決這個問題的方法。請注意,此處還描述了該錯誤: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; 
} 
+0

但是如果Facebook沒有賬戶存儲的東西,我希望它通過其他方法(單點登錄等)進行Facebook登錄,而不是失敗 – user102008

+0

我看到這個異常使用3.5.2,它檢查:https: //github.com/facebook/facebook-ios-sdk/blob/sdk-version-3.5.2/src/FBSystemAccountStoreAdapter.m#L174 –