使用iOS异步http请求,如何将收到的数据连接到请求?

时间:2012-11-04 16:55:58

标签: ios http asynchronous

我正在异步加载来自某个服务器的某些图像。我使用NSURLConnection connectionWithRequest方法一次触发多个请求,并使用NSURLConnectionDelegate didReceiveData接收数据。

在didReceiveData,我怎么知道这个数据匹配哪个请求?在didReceiveResponse,我可以使用作为参数给出的响应的URL方法,但在didReceiveData中我只有接收到的数据。

似乎完美的答案是使用NSURLConnection sendAsynchronousRequest,因为完成处理程序具有所有必需的参数:(NSURLResponse *,NSData *,NSError *)。我可以使用[响应URL]来匹配原始请求...除了一种情况:并非我尝试下载的所有图像都存在。在这种情况下,请求被重定向到一般错误页面并且接收到该通用页面的URL,因此我无法将响应与我所做的请求相匹配。我可以使用connectionWithRequest来处理这个问题,但是我无法充分利用这两个世界。

2 个答案:

答案 0 :(得分:0)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

你可以使用

NSURLRequest *request = [connection originalRequest];

获取启动连接的请求。

(此方法自iOS 5.0起可用,但我在Xcode iOS 5.1库中找不到它。您可以在iOS 6库中找到它,在头文件 NSURLConnection.h 中找到它:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/occ/instm/NSURLConnection/originalRequest)。

可以在此主题中找到更多管理多个连接的方法:Managing multiple asynchronous NSURLConnection connections

如果您使用sendAsynchronousRequest:queue:completionHandler:,则可以在完成块中使用request参数。

答案 1 :(得分:0)

在连接时:didReceiveData:第一个参数是NSURLConnection实例。所以我不明白问题出在哪里。您创建一个连接,然后向该连接发送请求,并且委托接收连接:didReceiveData和连接值。

如果您对所有请求使用相同的委托,则必须检查连接,以便说明与哪个请求相关联。

也许您必须维护一个连接/请求对表。