1

サーバーにヒットしてデータをもたらす NSOperation オブジェクトを追加し続ける NSOperationQueue があります。受信したデータを発射された順に保存する方法はありますか? たとえば、A、B、および C オブジェクトが ABC の順序で NSOperationQueue に追加されたとします。これで、3 つの A、B、C のそれぞれが、対応するスレッドにデータを取り込みます。配列の内容が「結果A」「結果B」「結果C」となるように、結果を同じ順序で配列に格納したい。この問題の解決策または正解への方向性を教えてください。みんなありがとう

EDITED-基本的に、サーバーからデータを取得する自動提案コンポーネントを設計したい(Googleアプリと同じ)、NSOperationQueueがこれを実装する最良の方法であると考えました。現在、maxConcurrentOperationCount を 1 に設定していますが、サーバーからのデータの受信が非常に遅いため、1 以上に設定したいと考えています。この質問に対する正しい解決策または方向性を指摘してください。ありがとう

4

3 に答える 3

3

一度に 1 つの op を使用している場合、simpleNSURLConnectionNSURLRequestメソッドとデリゲート メソッドを使用してそれを行います。操作で操作キューを作成する必要はありません

更新: 単一のリソースをダウンロードして並列ダウンロードを使用する場合は、この質問/回答を参照してください。

異なるホストを使用する代わりに、異なる NSURLRequests/NSURLConnections に対して同じホストを定義し、追加の「Range」http ヘッダーを追加して、要求されたファイルのデータ範囲を定義します。その後、すべての操作が完了し、データがたとえば配列に収集されました。データオブジェクトを要求された範囲で並べ替えて連結するだけです。

于 2011-01-05T18:29:28.230 に答える
1

データを作成するときに、各データに値を付けます。インデックスをNSOperationクラスに渡すことができ、応答を受け取ったら、データを独自のクラスにラップしてインデックスを付けます)

@class MyData : NSObject {
    NSData *data;
    uint index;
}

@property (nonatomic, assign) uint index;
@property (nonatomic, copy) NSData *data;

そして、すべての操作が戻ったら、MyDataオブジェクトの配列が必要です。インデックスで並べ替えて、最初の順序で取得します:)次に、データの抽出は簡単です。


一度に1つの操作だけをしたくないと思います:)

于 2011-01-05T16:40:22.077 に答える
1

本当にすべての結果が必要ですか? autosuggest コンポーネントを開発している場合は、最後の結果のみに関心を持つべきだと思います。この場合、処理する最後の操作を追加する前に、「-(void)cancelAllOperations」メッセージを NSOperationQueue に送信できます。このようにして、待機状態にある操作はキャンセルされ、処理中の操作は、データを返す前に「キャンセル」状態を確認する機会があります。

于 2011-01-06T12:35:18.270 に答える