Mat*_*cas 6 multithreading facebook asynchronous ios objective-c-blocks
我正在使用IOS Facebook SDK 3,我正在尝试使用更高效的方法.所以我想在单独的线程中管理一些请求.
例如这个请求(完美的工作):
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];
});
}];
}];
});
Run Code Online (Sandbox Code Playgroud)
我正在使用这个在我的Feed上发布一些内容,我调用一个方法来自动加载此请求的内容,然后在方法中调用此块以启动请求.这个很好用.
问题是如果我不把这个请求放在一个块里面,那就不行了.
此请求不起作用
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];
});
}];
});
Run Code Online (Sandbox Code Playgroud)
我想弄清楚,但我不明白是什么问题.在此先感谢您的帮助.
小智 6
我有一点这个问题.
确保在主线程上分派代码.
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
}];
});
Run Code Online (Sandbox Code Playgroud)
我不确定为什么它在一种情况下起作用,而在另一种情况下不起作用,但我认为这与后台队列返回后不运行的运行循环有关startWithCompletionHandler:。
但我想知道为什么你要把它放在后台队列中,因为它是一个异步调用。为什么不直接从主线程执行此操作:
FBRequest * rq = [FBRequest requestForMe];
[rq startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[[UFBManager defaultManager] errorHandlerFromError:error
fromRqType:UFBManagerRqTypeGet];
});
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5939 次 |
| 最近记录: |