Facebook iOS SDK 3.6 startWithGraphPath完成块未执行

Facebook iOS SDK 3.6 startWithGraphPath完成块未执行,ios,facebook-graph-api,Ios,Facebook Graph Api,我已经与Facebook集成,这样我就可以在我的订阅源中发布状态。我的一些代码是基于。从我的iOS应用程序运行以下Graph API请求时,不会调用请求的完成块,并且在XCode调试日志中不会出现错误 [FBRequestConnection startWithGraphPath:@"me/feed" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id resul

我已经与Facebook集成,这样我就可以在我的订阅源中发布状态。我的一些代码是基于。从我的iOS应用程序运行以下Graph API请求时,不会调用请求的完成块,并且在XCode调试日志中不会出现错误

[FBRequestConnection
startWithGraphPath:@"me/feed"
parameters:params
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    if (error) {
        DLog(@"error: domain = %@, code = %d", error.domain, error.code);
    } else {
        DLog(@"Posted action, id: %@", result[@"id"]);
    }
}];
我有两个方便的函数,它们在执行此请求之前对当前的
activeSession
执行检查。它们看起来像这样:

+ (BOOL)facebookSessionIsOpen {
    return (FBSession.activeSession.isOpen);
}

+ (BOOL)facebookSessionHasPublishPermissions {
    if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound ||
        [FBSession.activeSession.permissions indexOfObject:@"publish_stream"] == NSNotFound ||
        [FBSession.activeSession.permissions indexOfObject:@"manage_friendlists"] == NSNotFound) {
        return NO;
    } else {
        return YES;
    }
}
这两个函数都返回
YES
,表示具有必要发布权限的活动会话。更令人困惑的是,我可以使用以下代码在成功执行相同的检查(获取配置文件不需要授予发布权限)后无问题地获取用户的配置文件:

[FBRequestConnection
startWithGraphPath:@"me"
parameters:[NSDictionary dictionaryWithObject:@"picture,id,birthday,email,location,hometown" forKey:@"fields"]
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    NSDictionary* resultDict = (NSDictionary*)result;

    NSString* emailAddress = resultDict[@"email"];
    NSString* location = resultDict[@"location"][@"name"];
    NSString* birthday = resultDict[@"birthday"];
    NSString* homeTown = resultDict[@"hometown"][@"name"];
    ...
}];

有没有关于如何调试此问题的建议?

原来问题是线程问题。Facebook iOS SDK似乎不喜欢在不同的线程上执行
FBRequest
,而您称之为
openActiveSessionWithReadPermissions
的线程会立即死锁。原来我是在一个单独的线程中运行postStatus请求的,如下所示:

dispatch_queue_t some_queue = dispatch_queue_create("some.queue.name", NULL);
dispatch_async(some_queue, ^{
    [FacebookHelper postStatusToFacebookUserWall:newStatus withImage:imageData];
}];
确保您的
openActiveSessionWithReadPermissions
和任何
FBRequest
排列都发生在同一个线程上,否则您可能会遇到这些静默故障