Objective c Facebook sdk iOS注销错误

Objective c Facebook sdk iOS注销错误,objective-c,xcode,facebook,Objective C,Xcode,Facebook,我目前正在使用新的Facebook SDK,我有一个非常奇怪的问题。我有一个名为FacebookExplorerTableViewController的viewcontroller,在我的viewdidload中有以下代码: if(appDelegate.session.isOpen) { [self receiveAlbums]; } else { appDelegate.session = [[FBSession alloc]

我目前正在使用新的Facebook SDK,我有一个非常奇怪的问题。我有一个名为FacebookExplorerTableViewController的viewcontroller,在我的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的viewcontroller,在其中我可以选择注销:

[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!该如何运行以及如何消除错误?:)


提前谢谢

我也有同样的问题。我的问题是通过将其传递到NSDictionary来保留
[FBSession activeSession].accessToken
。最简单的解决方案是传递一个
[NSString stringWithFormat:@“%@”,[FBSession activeSession].accessToken]
而不是直接的
[FBSession activeSession].accessToken
用法。

我也遇到过同样的问题。我的问题是通过将其传递到NSDictionary来保留
[FBSession activeSession].accessToken
。最简单的解决方案是传递一个
[NSString stringWithFormat:@“%@”,[FBSession activeSession].accessToken]
而不是直接的
[FBSession activeSession].accessToken
用法。

这就是您所有的FB SDK API设置吗?需要更多的代码,您还没有设置访问令牌或过期日期。这就是您所有的FB SDK API设置吗?需要更多的代码,您尚未设置访问令牌或过期日期。谢谢您的回答。我已经通过双重检查会话是否在完成块中打开来解决了这个问题,所以这是一个工作循环。我还没有尝试过你的解决方案,但任何有相同问题的人都可以使用此解决方案;)谢谢你的回答。我已经通过双重检查会话是否在完成块中打开来解决了这个问题,所以这是一个工作循环。我还没有尝试过你的解决方案,但任何有相同问题的人都可以使用此解决方案;)