2012-03-01 39 views
1

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

我有两个问题: 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请求]:无法识别的选择发送到实例0x16f54c70

回答

4

这些都是实际上只是固定在一两天:)

来吧,升级到最新版本的高手,其中包括以下内容:

cc2115e469:默认情况下,进度块现在派发为主,就像AFNetworking中的所有其他完成块一样。这应该解决在用户界面周围没有更新的任何问题。

cac44aeb34:修复了NSBlockOperation发送问题request。在cancelAllHTTPOperationsWithMethod:中存在一个不正确的假设,即所有操作都是AFHTTPRequestOperation。唯一的缺点是它不能处理你的批量操作。为此,你总是可以遍历httpClient.operationQueue.operations并挑选出你想要的。

+0

你好mattt,好吧,你是对的,我现在有一个干净的进度条工作!谢谢。对于2),我真的不知道如何杀死所有的操作。我在我的iPad应用程序中创建了一个同步引擎,它将3或4个不同的URL发送到Rails Web应用程序,有时我需要一个队列来备份和执行操作。我为我的所有操作使用了AFHTTPClient的一个子类。我的目标是在应用程序退出活动时(或者如果用户想要停止同步),终止所有类型的操作或队列。我在维基上看到了你的代码,但我不明白这样做的最好方法(杀死所有操作)。 – 2012-03-01 20:27:35

+4

当应用变为不活动状态时,您可以执行'[httpClient.operationQueue cancelAllOperations]'或'[httpClient.operationQueue suspend]',当它恢复时,可以执行'[httpClient.operationQueue resume]'。 – mattt 2012-03-02 03:47:31

+0

谢谢。我会试试这个。 – 2012-03-02 07:42:45

相关问题