2012-11-10 8 views
11

Mit Facebook iOS SDK 3.1.1, ich bin Durchführung Login mit diesem Aufruf -NSInvalidArgumentException von ACAccountStore geworfen beim Aufruf von [FBSession openActiveSessionWithPermissions ...] auf iOS 6.0 und 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 { ... } 

Es gibt In seltenen Fällen, wenn diese Methode NSInvalidArgumentException mit der Nachricht Access options are not permitted for this account type. The options argument must be nil. auslöst, wird dies von [ACAccountStore requestAccessToAccountsWithType:options:completion:] ausgelöst.

docs von ACAccountStore Apple überprüft, sehe ich diesen Kommentar für diese Methode.

„Bestimmte Kontotypen (wie Facebook) erfordern einen Options Wörterbuch Diese Methode wird ein NSInvalidArgumentException werfen, wenn die Wörterbuch-Optionen ist nicht vorgesehen Wenn der Kontotyp kein Optionsverzeichnis benötigt, muss der Optionsparameter null sein. "

Apple muss dies bis auf Facebook nil sein, aber diese Methode wird von Facebook aufgerufen, also Vielleicht ist dies ein Bug - entweder bei Facebook oder bei iOS 6.0/.1, aber ich konnte nichts im Web finden Zum Thema.

Irgendwelche Ideen?

+0

Ich habe eine Crashlog mit der gleichen Spur bekommt. Hast du das jemals gelöst? Danke im Voraus! –

+0

Nein, im Moment fange ich nur die Ausnahme und ignoriere sie. – Kof

+0

Haben Sie dieses Problem gelöst? – vburojevic

Antwort

4

Ich habe eine Arbeit für diesen Fehler gefunden. Beachten Sie, dass der Fehler hier auch beschrieben wird: https://developers.facebook.com/bugs/139251032898548

Das Facebook SDK überprüft den Rückgabewert von accountTypeWithAccountTypeIdentifier nicht auf Null. Siehe https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBSystemAccountStoreAdapter.m?source=c#L176

, um das Problem zu umgehen, können Sie die folgende Kontrolle tun, bevor Facebook lgoin versuchen:

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

Aber wenn es keine Account Store-Sache für Facebook gibt, möchte ich, dass Facebook über die anderen Methoden einloggen (Single Sign-On, etc.) statt – user102008

+0

Ich sah diese Ausnahme mit 3.5.2, die überprüft: https: //github.com/facebook/facebook-ioss-sdk/blob/sdk-version-3.5.2/src/FBSystemAccountStoreAdapter.m#L174 –