AFNetworking +下载队列中的图像+取消操作

时间:2012-03-01 13:17:28

标签: queue afnetworking

我需要下载一个图像队列。 我首先创建了我的操作,然后使用AFNetworking的“enqueue”方法添加它们。

我有两个问题: 1)我没有为队列工作的进度条(我让它使用自定义操作队列) 2)当我想要

时,我没有找到停止队列的解决方案

我创建了第一批批处理操作并在数组中添加主题:

  while ((dict = [enumerator nextObject]))
  {    
    NSMutableURLRequest *request = [[MyHTTPClient sharedClient] requestWithMethod:@"GET" path:@"ws/webapp/services/pull_image" parameters:dict];

    AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request
imageProcessingBlock:nil                                                                                       cacheName:nil
    success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 
    {
      NSLog(@"image : %@", [image description]);
      // process images
    }
    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
    {
      // manage errors
    }];

    [operations addObject:operation];
  }

然后,我将操作排入队列:

     [[MyHTTPClient sharedClient] enqueueBatchOfHTTPRequestOperations:operations 
       progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) 
       {
           float percentDone = ((float)((int)numberOfCompletedOperations) / (float)((int)totalNumberOfOperations));
  [delegate syncServicesController:self updateProgressView:percentDone];
       } 
       completionBlock:^(NSArray *operations) 
      {
        //
      }];

因此,进度下载不起作用。 但我可以看到numberOfCompletedOperations的进展......? 1,2,3,4,5 ...我是否需要在主线程中强制刷新进度视图?

当我试图停止网络任务时:

- (void)cancelAllRequests
{
  [[MyHTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull_image"];

}

我不明白如何停止请求队列......这似乎有效,但我有这个错误: - [NSBlockOperation request]:无法识别的选择器发送到实例0x16f54c70

1 个答案:

答案 0 :(得分:4)

这些实际上只是在最后一两天修复:)

继续并更新到master的最新版本,其中包括以下内容:

cc2115e469:进度块现在默认发送到main,就像AFNetworking中的所有其他完成块一样。这应该可以修复UI周围没有更新的任何问题。

cac44aeb34:修复了NSBlockOperation发送request时遇到的问题。在cancelAllHTTPOperationsWithMethod:中有一个错误的假设,即所有操作都是AFHTTPRequestOperation。唯一的缺点是它不会处理您的批量操作。为此,您始终可以遍历httpClient.operationQueue.operations并选择您想要的那个。