0

Webから画像データをダウンロードするためにNSUrlConnectionを複数回呼び出すiOSアプリケーションを作成しました。場合によっては、1つのNSUrlConnectionが他の起動前に終了していないことがあります。私は壊れたjpegデータを見ています。私はdidReceiveDataデリゲートが2つの別々のNSUrlConnectionsからデータを保存していて、2つのjpegデータストリームを1つのデータ変数にまとめて破損させているからです。NSUrlConnectionの複数のインスタンスでデータが破損するのを防ぐには

私の質問です:これを避けるための最善の方法は何ですか?各NSUrlConnectionインスタンスを個別のデータ変数に保存する方法や、保存する前に前のインスタンスが完了するまで各インスタンスを待機させる方法はありません。

基本的に私のコードは、loadData関数を複数回呼び出してNSURLRequestとNSURLConnectionを作成する点を除いて、Appleの例に従います。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

ご協力いただきありがとうございます。

答えて

1

デリゲートのconnection:didReceiveData:メソッドが呼び出されると、接続インスタンスが最初のパラメータとして使用されます。だから、ちょうどデータを受け取った接続を追跡するためにそれを使用する必要があります。

アップルのサンプルでは、​​NSMutableDataの1つのインスタンスが維持されています。コードには複数のインスタンスが必要です。アクティブな接続ごとに1つずつです。

もちろん、接続ごとに個別のデリゲートオブジェクト(個々のインスタンス)を持つこともできます。それはより簡単かもしれません。

+0

ありがとうございます! didReceiveData1とconnection:didReceiveData2メソッドは、NSUrlConnectionsがいくつでも存在する可能性があるため、NSUrlConnectionごとに1つずつです。 NSMutableDataの複数のインスタンスをどのように維持するのですか? NSMutableDatasの配列を作成し、それぞれの接続に書き込む必要がありますか? – Jackson

+0

また、どのNSUrlConnectionがNSMutableDictionaryを使用して終了するかを追跡する方法を見つけました。 connectionDidFinishLoadingでは、どの接続が完了したかを確認し、それに従って適切なビューを更新するために作成した辞書を調べます。多分私はそのコードを辞書にも使ってデータを扱うことができます...?どのように私はそれについて行くだろうかに関する任意の提案? – Jackson

+0

ああ、私はそれを得たと思う。私がしたことは、recievedData用に別のNSMutableDictionaryを作成することでした。 NSMutableData * receivedData = [[NSMutableData data] retain]; \t \t [dataDictionary setObject:receivedData forKey:[接続の説明]]; 受信したデータには、[接続の説明]キーで識別できる対応する接続​​があります。 次にdidReceiveDataでは、私は言う: NSMutableData * receivedData = [dataDictionary objectForKey:[接続の説明]]; \t [receivedData appendData:data]; など 妥当な解決策のようですか? – Jackson

関連する問題