0

現在、新しい Facebook SDK を使用していますが、非常に奇妙な問題があります。FacebookExplorerTableViewController と呼ばれるビューコントローラーがあり、viewdidload には次のコードがあります。

if(appDelegate.session.isOpen)
    {
        [self receiveAlbums];
    }
    else 
    {
        appDelegate.session = [[FBSession alloc] init];

        appDelegate.session = [FBSession sessionOpenWithPermissions:nil completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
            NSLog(@"opened session");
            if(!error) [self receiveAlbums];
            else NSLog(@"error: %@",error);
        }];
}

実行しているときは、すべて問題ありません。ただし、SharingSettingsTableViewController という名前の別のビューコントローラーがあり、ログアウトするオプションがあります。

[appDelegate.session closeAndClearTokenInformation];

ログアウトしようとすると、xCode がクラッシュします。

2012-08-09 21:29:19.683 My Albums[2197:17903] opened session
2012-08-09 21:29:19.684 My Albums[2197:17903] requesting albums
2012-08-09 21:29:19.695 My Albums[2197:17903] access token: (null)
2012-08-09 21:29:19.697 My Albums[2197:17903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(0x1b6d022 0x1f56cd6 0x1aac7db 0x1ac4e86 0x757a5 0x754f4 0xa17e2 0x9ef39 0x676f9 0x92c3f1 0x1b6ee99 0x55514e 0x5550e6 0x5fbade 0x5fbfa7 0x5fb266 0x57a3c0 0x57a5e6 0x560dc4 0x554634 0x232eef5 0x1b41195 0x1aa5ff2 0x1aa48da 0x1aa3d84 0x1aa3c9b 0x232d7d8 0x232d88a 0x552626 0x21ed 0x2155)
terminate called throwing an exception

完了ブロックが再び実行されるようです! コンソールの「アルバムのリクエスト」は、receiveAlbums への呼び出しから来ています。

この完了ブロックが再度実行されるのはなぜですか? 設定ビュー コントローラーに移動した時点で、既に FacebookExplorerTableViewController の割り当てを解除しています。どうすればこれを実行でき、どうすればエラーを取り除くことができますか? :)

前もって感謝します!

4

1 に答える 1

4

私は同じ問題を抱えていました。私の問題は[FBSession activeSession].accessToken、それを NSDictionary に渡して保持することでした。最も簡単な解決策は、直接使用する[NSString stringWithFormat:@"%@", [FBSession activeSession].accessToken]代わりにa を渡すことでした。[FBSession activeSession].accessToken

于 2012-08-14T10:41:34.453 に答える