AFNetworking 2.0完成下载多个图像

我试图找出一种方法来下载与AFNewtorking 2.0多个图像。 我在这里看了很多post,但找不到我要找的答案,希望你们能帮助我。

问题是,我想知道什么时候所有的下载完成,如果所有的图像下载。 所以我有一个图像URL的antarrays试图做这样的事情。

for(NSString *photoUrlString in self.photos){ NSURL *url = [NSURL URLWithString:photoUrlString]; AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:url]]; requestOperation.responseSerializer = [AFImageResponseSerializer serializer]; [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Image error: %@", error); }]; [requestOperation start]; } 

我已经find了一些答案,把这些请求放入一个队列,并将最大并发操作设置为1.但不知道这是如何工作真的。

任何帮助表示赞赏,在此先感谢!

 for(Photo *photo in array){ //form the path where you want to save your downloaded image to NSString *constPath = [photo imageFullPath]; //url of your photo NSURL *url = [NSURL URLWithString:photo.serverPath]; AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:url]]; op.responseSerializer = [AFImageResponseSerializer serializer]; op.outputStream = [NSOutputStream outputStreamToFileAtPath:constPath append:NO]; op.queuePriority = NSOperationQueuePriorityLow; [op setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead){ }]; op.completionBlock = ^{ //do whatever you want with the downloaded photo, it is stored in the path you create in constPath }; [requestArray addObject:op]; } NSArray *batches = [AFURLConnectionOperation batchOfRequestOperations:requestArray progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) { } completionBlock:^(NSArray *operations) { //after all operations are completed this block is called if (successBlock) successBlock(); }]; [[NSOperationQueue mainQueue] addOperations:batches waitUntilFinished:NO]; 

尝试这个:

 // _group, _queue are iVar variable dispatch_group_t *_group = dispatch_group_create(); dispatch_queue_t *_queue = dispatch_queue_create("com.company.myqueue2", NULL); // all files download for(int i = 0 ; i < numberOfFileDownloads; i++){ dispatch_group_async(_group, _queue, ^{ // here is background thread; // download file }); } // all files are download successfully, this method is called dispatch_group_notify(_group, _queue, ^{ } 

+[AFURLConnectionOperation batchOfRequestOperations:progressBlock:completionBlock:]+[AFURLConnectionOperation batchOfRequestOperations:progressBlock:completionBlock:]

虽然没有文件记载,但实施是不言自明的。 它也可以让你监视进度。

在使用此方法之前,您将需要有一个HTTP操作数组(如果您决定坚持使用基于NSURLConnection的AFNetworking实现)。