0

次のような for ループで複数の AFJSONRequestOperation を開始しています。

for(NSString *obj in collection)

operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

         //NSLog(@"success");      

        }
        failure:nil];
[operation start];

すべての操作が完了したことを確認するにはどうすればよいですか?

操作が AFHTTPClient に追加されていると思いますoperationQueueが、よくわかりません。いずれにせよ、使用されている AFHTTPClient のインスタンスにアクセスする方法がわかりません。

4

2 に答える 2

0

ループの外側で、最初にコレクションの要素数に設定されるカウンター (int) を定義します。完了ブロック (つまり、成功と失敗のハンドラーで明示的に意味します) で、カウンターを 1 つ減らします。ゼロになると、すべてのリクエストが終了しています。

注意: 完全にはわかりませんが、私が知る限り、はキャンセルされAFJSONRequestOperationたときにハンドラー ブロックを呼び出しません。ドキュメントを参照してください。(個人的には、これは設計上の問題だと思いますが、残念ながら...)

この問題には、より洗練された解決策があります。ただし、これには、このような一般的な非同期設計パターンを実装するのに役立つ、より特殊なクラスとツールのセットが必要になります。

于 2013-07-16T08:26:47.873 に答える
0

各オブジェクトを開始する代わりに (この場合は使用しています)AFJSONRequestOperationにオブジェクトを追加してから、次のメソッドを使用します。NSMutableArrayoperations

AFHTTPClient *client = [[AFHTTPClient alloc] initWithURL:baseURL];
[client enqueueBatchOfHTTPRequestOperations:operations progressBlock:nil completionBlock:^(NSArray *operations) {
    // called when all operations have finished.
}];
于 2013-07-16T11:11:09.377 に答える