0

特定のサーバーから特定の画像を非同期で読み込んでいます。NSURLConnection connectionWithRequestメソッドを使用して一度に多数のリクエストを実行し、NSURLConnectionDelegatedidReceiveDataを使用してデータを受信します。

didReceiveDataで、このデータがどのリクエストに一致するかをどのように知ることができますか?didReceiveResponseでは、パラメーターとして指定された応答のURLメソッドを使用できますが、didReceiveDataでは、受信したデータしかありません。

完了ハンドラーには必要なすべてのパラメーター(NSURLResponse *、NSData *、NSError *)があるため、完璧な答えはNSURLConnectionsendAsynchronousRequestを使用することであるように思われました。[応答URL]を使用して、元のリクエストと一致させることができます... 1つの場合を除いて、ダウンロードしようとしているすべての画像が存在するわけではありません。その場合、リクエストは一般的なエラーページにリダイレクトされ、その一般的なページのURLが受信されるため、私が行ったリクエストに対する応答を一致させることができません。これはconnectionWithRequestで処理できましたが、両方の長所を活用することはできません。

4

2 に答える 2

0

connection:didReceiveData:最初のパラメーターはNSURLConnectionインスタンスです。だから私は問題がどこにあるのか分かりません。接続を作成してから、その接続にリクエストを送信すると、デリゲートは接続値を含むconnection:didReceiveDataを受信します。

すべてのリクエストに同じデリゲートを使用している場合は、接続を確認して、どのリクエストが関連付けられているかを確認する必要があります。

おそらく、接続/要求のペアのテーブルを維持する必要があります。

于 2012-11-04T18:24:55.573 に答える
0

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

あなたが使用することができます

NSURLRequest *request = [connection originalRequest];

接続が開始された要求を取得します。

(このメソッドはiOS 5.0以降で使用できますが、Xcode iOS 5.1ライブラリでは見つかりませんでした。iOS6ライブラリ、ヘッダーファイル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 に答える