0

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

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

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

4

2 回答 2

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)。

更多管理多个连接的方法可以在这个线程中找到:管理多个异步 NSURLConnection 连接

如果你使用sendAsynchronousRequest:queue:completionHandler:那么你可以只使用request完成块中的参数。

于 2012-11-04T18:18:49.047 回答
0

At connection:didReceiveData: the first parameter is the NSURLConnection instance. So I don't understand where the problem is. You create a connection, then you send a request to that connection and the delegate receive the connection:didReceiveData with the connection value.

If you are using the same delegate for all the request you have to check the connection so you can say which request is associated to.

Perhaps you have to maintain a table of connection/request pairs.

于 2012-11-04T18:24:55.573 回答