2012-11-04 27 views
0

我正在從某個服務器異步加載某些圖像。我使用NSURLConnection connectionWithRequest方法一次性發出多個請求,並使用NSURLConnectionDelegate didReceiveData接收數據。使用iOS異步HTTP請求,您如何將接收到的數據連接到請求?

在didReceiveData,我怎麼知道這個數據匹配哪個請求?在didReceiveResponse中,我可以使用給定響應的URL方法作爲參數,但在didReceiveData中,我只有收到的數據。

看起來完美的答案是使用NSURLConnection sendAsynchronousRequest,因爲完成處理程序具有所有必需的參數:(NSURLResponse *,NSData *,NSError *)。我可以使用[回覆URL]與原始請求進行匹配...除了一種情況:並非我嘗試下載的所有圖像都存在。在這種情況下,請求被重定向到一個通用的錯誤頁面,並且該通用頁面的URL被接收,所以我無法將響應與我所做的請求進行匹配。我可以用connectionWithRequest處理,但是我無法得到兩全其美的結果。

回答

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參數。

+0

謝謝,我只是錯過了。 – james0n

0

連接:didReceiveData:第一個參數是NSURLConnection實例。所以我不明白問題在哪裏。您創建一個連接,然後向該連接發送一個請求,委託接收連接:具有連接值的didReceiveData。

如果您對所有請求使用相同的委託,則必須檢查連接,以便可以說出與哪個請求關聯。

也許你必須維護一個連接/請求對的表。

+0

謝謝,這是真的。 – james0n