私のアプリは、Flickr のユーザーから多くの情報と画像をダウンロードし、AFHttpClient を使用しています。したがって、基本的には、誰もが事実上NSUrlConnection
非同期に処理され、完了ブロックが実行されます。1 つのクラスには各 API 呼び出しのメソッドがあり、別のクラスには API 呼び出しをループして各ユーザー データを取得し、それをコア データに入れます。ただし、私の問題は、API クラスを呼び出すクラスがすべてのダウンロードがいつ完了したかを判断し、それをコア データに入れる方法を理解できないことです。また、複数のユーザー データを同時にダウンロードし、さまざまな属性がユーザーに応じてさまざまな順序で読み込まれます。助言がありますか?
質問する
790 次
2 に答える
1
AFNetworking により、複数のリクエストと最終コールバックの管理が非常に簡単になりました。
- (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations
progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock
completionBlock:(void (^)(NSArray *operations))completionBlock;
また
- (void)enqueueBatchOfHTTPRequestOperationsWithRequests:(NSArray *)urlRequests
progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock
completionBlock:(void (^)(NSArray *operations))completionBlock;
AFHHTPClient インスタンスで。
例:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];
NSURLRequest *otherRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]];
AFHTTPRequestOperation *operationForImages = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operationForImages setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//success of images request
self.imageDictionary = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//manage error for this request
}];
AFHTTPRequestOperation *operationForText = [[AFHTTPRequestOperation alloc] initWithRequest:otherRequest];
[operationForText setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//success of text request
self.textDictionary = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//manage error for this request
}];
[[MyPersonalAFHTTPClient sharedClient] enqueueBatchOfHTTPRequestOperations:@[operationForImages,operationForText] progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
//track progression of requests
} completionBlock:^(NSArray *operations) {
//all the request are completed
}];
于 2013-05-27T15:46:56.070 に答える
0
インスタンス変数を使用して、進行中のアクティブなリクエストの数を数えます。これは、インクリメントおよびデクリメントされる単純な NSInteger である場合もあれば、ユーザー名でキー付けされ、必要に応じて数値またはより詳細な追跡レコードを保持する辞書である場合もあります。どのレベルの詳細が必要かによって異なります。API 呼び出しを行うクラスは、このレコード データのすべての管理を行い、'count' メソッドのみを提供する必要があります。
于 2013-05-27T06:59:10.540 に答える