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实现)。
- 用于iOS 8扩展的AFNetworking后台会话configuration
- AFNetworking – 如何发出POST请求
- AFNetworking 2.0:无法使用JSON从IOS进行POST
- 如何使用AFNetwork的AFHTTPRequestOperationManager设置HTTP请求正文?
- 与AFNetworking在UICollectionView错误asynchronous下载
- 从块内部variables
- AFNetworking和networking错误
- AFNetworking – 如何设置超时时重试的请求?
- 使用带有AFNetworking的SSLSetEnabledCiphers来禁用弱密码