主なアイデアは、サブクラスAFHTTPClient
のシングルトンを介してすべての API を呼び出しAFHTTPClient
、すべての要求がエラー処理と HUD 表示のために 1 つのポイントを通過することです。これは、すべての API 呼び出しのエントリ ポイントです。
-(void) makeRequestWithPath:(NSString*) path andParams:(NSDictionary*) params
success:(void (^)( id JSON, AFHTTPRequestOperation *operation)) success
failure:(void (^)( NSError *error)) failure
そして、私はそのようなAPI呼び出しのための多くのメソッドを持っています:
-(void) getListMainTreeWithSuccess:(void (^)( id JSON, AFHTTPRequestOperation *operation)) success
failure:(void (^)( NSError *error)) failure
{
[self makeRequestWithPath:@"objects/selectlist" andParams:nil success:^(id JSON, AFHTTPRequestOperation *operation) {
success(JSON,operation);
} failure:^(NSError *error) {
failure(error);
}];
}
これは私のニーズにぴったりです。AFHTTPClient
しかし、サブクラスを介してループでシリアルリクエストを作成し、それらすべてが終了したときに何らかのアクションを実行する必要があるという問題に直面しました。メソッドが見つかりました
-(void)enqueueBatchOfHTTPRequestOperationsWithRequests:(NSArray *)urlRequests
progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock
completionBlock:(void (^)(NSArray *operations))completionBlock
これは私の問題を解決するはずですが、問題は、すべてのメソッドを呼び出してAFHTTPClient
getPath: と postPath: のメソッドを呼び出すことです。以前の方法では、すべてを書き直す必要があり、サブクラスを完全に役に立たNSArray
なくAFHTTPRequestoperation
します。サブクラスとメソッドから構築または抽出できます。以前、 __block を使用してリクエストをセマフォなどと同期しようとしましたが、必要なものを取得できませんでした。助けてください!
更新:enqueueBatchOfHTTPRequestOperations
このメソッドは http 要求操作の配列を必要とするため、(すべてのコードを書き直しても) メソッド
を使用することさえできないようですが