AFNetworking 2.0 descarga varias imágenes con finalización

Estoy tratando de encontrar una forma de download varias imágenes con AFNewtorking 2.0. He leído muchas publicaciones aquí en SO, pero no puedo encontrar la respuesta que estoy buscando, espero que ustedes puedan ayudarme.

El problema es que quiero saber cuándo finalizaron todas las descargas y si todas las imágenes se downloadon. Así que tengo una matriz con la ant de la URL de la image que intenta hacer algo como esto.

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]; } 

He encontrado algunas respuestas con poner estas requestes en una queue y establecer operaciones máximas simultáneas en 1. Pero no sé cómo funciona realmente.

Cualquier ayuda es apreciada, gracias de antemano!

 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 stonetworking 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]; 

Prueba esto:

 // _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, ^{ } 

Echa un vistazo a +[AFURLConnectionOperation batchOfRequestOperations:progressBlock:completionBlock:]

Aunque no está documentado, la implementación se explica por sí misma. También le permite controlar el progreso.

Deberá tener una matriz de operaciones HTTP antes de utilizar este método (esto es si ha decidido seguir la implementación basada en NSURLConnection de AFNetworking).