ios - 在分离的线程问题中带有 block 的异步 FB 请求

标签 ios facebook multithreading asynchronous objective-c-blocks

我正在使用 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/

相关文章:

java - 在 Map 中,如果我们使用现有键进行修改,我们不会得到 ConcurrentModificationException

ios - swift2 中的段错误 11

ios - Viewcontroller 堆栈理解问题

ios - 如何自定义TabBarItems?

ios - sizeToFit 和约束

actionscript-3 - 使用 Actionscript 3 从 Facebook 加载个人资料图像

iOS:通过应用程序登录 Facebook

java - 用于中断和重新启动计算的并发算法

html - 自定义 Facebook 选项卡上的奇怪边框问题

java - 即使在单独的线程中实现 sleep 后,GUI 执行也不会延迟