在Web服务调用期间没有响应

时间:2014-05-25 18:32:33

标签: ios web-services grand-central-dispatch

我想在单独的线程上进行Web服务调用。我使用以下代码,

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // My web service request goes from here 
});

请求成功,但没有回复,我无法找出原因。

如果我使用

dispatch_async(dispatch_get_main_queue(), ^{
    // My Web service request goes from here 
});

响应即将回来,但UI被阻止,直到那时,我想在一个单独的线程中执行Web服务请求而不阻止UI。

1 个答案:

答案 0 :(得分:0)

这个想法是为请求使用后台线程,但是在main上处理结果(更改UI)。 This answer显示了(基本上是通过将主队列块嵌套在后台块中),但NSURLConnection提供了一种更简单的方法:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http..."]];

[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    // update the UI here
}];

这个方便的方法执行主要的请求,并且 - 因为你传递主队列 - 在主要队列上执行完成块。