放置在操作队列中时,网络操作不再完成

时间:2014-01-21 19:19:44

标签: ios nsoperationqueue

我有一些代码要添加到操作队列中,问题是代码函数何时不在队列中,但一旦添加到队列中就没有任何反应。

以下是我要添加到队列中的代码:

NSString* graphRequest = @"https://graph.facebook.com/redacted/picture?type=square";
FBRequest *fbRequest = [FBRequest requestForGraphPath: graphRequest];
[fbRequest startWithCompletionHandler:
 ^(FBRequestConnection *connection, id result, NSError *theError)
 {
     NSLog(@"Completed");
 }];

执行上面的代码时,会在几秒钟左右调用完成块。

但是,如果我尝试在操作队列中执行相同的代码,则永远不会调用完成块:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:
 ^{
    NSString* graphRequest = @"https://graph.facebook.com/redacted/picture?type=square";
    FBRequest *fbRequest = [FBRequest requestForGraphPath: graphRequest];
    [fbRequest startWithCompletionHandler:
     ^(FBRequestConnection *connection, id result, NSError *theError)
     {
         NSLog(@"Completed");
     }];
}];

使用此代码没有任何反应。

1 个答案:

答案 0 :(得分:2)

问题是FBRequest仅出于某种原因才能在主线程上运行。你真的不应该太担心它,因为startWithCompletionHandler无论如何都会运行异步。如果你真的想使用NSOperationQueue,你必须要dispatch_async到主线程。

希望有所帮助。