0

私のアプリは、Flickr のユーザーから多くの情報と画像をダウンロードし、AFHttpClient を使用しています。したがって、基本的には、誰もが事実上NSUrlConnection非同期に処理され、完了ブロックが実行されます。1 つのクラスには各 API 呼び出しのメソッドがあり、別のクラスには API 呼び出しをループして各ユーザー データを取得し、それをコア データに入れます。ただし、私の問題は、API クラスを呼び出すクラスがすべてのダウンロードがいつ完了したかを判断し、それをコア データに入れる方法を理解できないことです。また、複数のユーザー データを同時にダウンロードし、さまざまな属性がユーザーに応じてさまざまな順序で読み込まれます。助言がありますか?

4

2 に答える 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 に答える