异步数据通话& CoreAnimation

时间:2013-06-11 19:08:50

标签: ios objective-c multithreading asynchronous nsurlconnection

我目前正在这样做:

        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

然后我更新了UI并运行了很多动画来显示我刚刚收到的数据。

但是我现在正在尝试使用异步请求来加载信息,因为上面的方法正在锁定主线程。

有什么想法吗?我已尝试设置NSOperationQueue并使用:

                NSData *responseGBP = [NSURLConnection sendAsynchronousRequest:requestGBP queue:operationQueue completionHandler:nil];

但是我收到此错误:使用不兼容类型'void'的表达式初始化'NSData * __ strong'

天才可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

sendAsynchronousRequest:queue:completionHandler:返回void,因此您无法立即初始化 NSData 对象,需要等待响应,这是异步的。所以就这样做:

[NSURLConnection sendAsynchronousRequest:requestGBP queue:operationQueue completionHandler: ^(NSURLResponse* response, NSData* data, NSError* error)
{
    responseBGP= data;
    // Additional code handling the result goes here, not after the call.
}];
// Here responseBGP may be nil as well, you don't know when the concurrent 
// operation will finish.

请注意,在调用此方法之后,不会说 responseBGP 将被初始化,因为该方法是异步的,在队列上执行。