我目前正在这样做:
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
然后我更新了UI并运行了很多动画来显示我刚刚收到的数据。
但是我现在正在尝试使用异步请求来加载信息,因为上面的方法正在锁定主线程。
有什么想法吗?我已尝试设置NSOperationQueue并使用:
NSData *responseGBP = [NSURLConnection sendAsynchronousRequest:requestGBP queue:operationQueue completionHandler:nil];
但是我收到此错误:使用不兼容类型'void'的表达式初始化'NSData * __ strong'
天才可以帮助我吗?
答案 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 将被初始化,因为该方法是异步的,在队列上执行。