AFNetworking + загрузка изображений в очередь + операции отмены - PullRequest
1 голос
/ 01 марта 2012

Мне нужно скачать очередь изображений.Сначала я создал свои операции, а затем добавил их с помощью метода «enqueue» AFNetworking.

У меня 2 проблемы: 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

1 Ответ

4 голосов
/ 01 марта 2012

Они были на самом деле просто исправлены в последний день или два:)

Продолжите и обновите до последней версии master, которая включает в себя следующее:

cc2115e469 : блоки прогресса теперь отправляются на главную по умолчанию, как и все остальные блоки завершения в AFNetworking. Это должно исправить все проблемы, связанные с тем, что пользовательский интерфейс там не обновляется.

cac44aeb34 : устраняет эту проблему при отправке NSBlockOperation request. В cancelAllHTTPOperationsWithMethod: было ошибочное предположение, что все операции были AFHTTPRequestOperation. Единственным недостатком является то, что он не будет обрабатывать ваши пакетные операции. Для этого вы всегда можете перебрать httpClient.operationQueue.operations и выбрать тот, который вам нужен.

...