AFNetworking 2.0 download multiple images with completion

后端 未结 3 377
再見小時候
再見小時候 2021-01-01 05:23

I\'m trying to figure out a way to download multiple images with AFNewtorking 2.0. I\'ve read a lot of posts here in SO, but can\'t find the answer I\'m looking for, hope yo

相关标签:
3条回答
  • 2021-01-01 06:14
    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];
    
    0 讨论(0)
  • 2021-01-01 06:20

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

    Although it's not documented, implementation is self-explanatory. Also it allows you to monitor the progress.

    You will need to have an array of HTTP operations prior to using this method (this is if you decided to stick to NSURLConnection-based implementation of AFNetworking).

    0 讨论(0)
  • 2021-01-01 06:24

    Try this:

    // _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, ^{
    }
    
    0 讨论(0)
提交回复
热议问题