我正在使用 IOS Facebook SDK 3,我正在尝试以更高效的方式使用它。 所以我想在单独的线程中管理一些请求。
例如这个请求(WORKS PERFECTLY):
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_async(queue, ^{
[self generateShareContentFor:ShareServiceTypeFacebook
callback:^(NSMutableDictionary* obj)
{
FBRequest * rq = [FBRequest requestWithGraphPath:@"me/feed"
parameters:obj
HTTPMethod:@"POST"];
[rq startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
// TREATING RESULT
[[UFBManager defaultManager] errorHandlerFromError:error
fromRqType:UFBManagerRqTypePost];
});
}];
}];
});
我正在使用这个来在我的 feed 上发布一些东西,我调用了一个方法来自动加载这个请求的内容,然后这个 block 将在该方法中被调用以启动请求。 这个效果很好。
问题是如果我不把这个请求放在一个 block 中,那是行不通的。
此请求无效
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_async(queue, ^{
FBRequest * rq = [FBRequest requestForMe];
[rq startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
// TREATING RESULT
[[UFBManager defaultManager] errorHandlerFromError:error
fromRqType:UFBManagerRqTypeGet];
});
}];
});
我想弄清楚,但我不明白问题出在哪里。 预先感谢您的帮助。
最佳答案
我有一段时间遇到这个问题。
确保在主线程上分派(dispatch)代码。
dispatch_async(dispatch_get_main_queue, ^{
FBRequest * rq = [FBRequest requestForMe];
[rq startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
//The docs say this will be the main queue here anyway
//Feel free to go on a background thread at this point
}];
});
关于ios - 在分离的线程问题中带有 block 的异步 FB 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151729/