AFNetworking + отмена всех запросов

У меня действительно есть проблема, когда я хочу остановить все текущие запросы в механизме синхронизации, созданном с помощью AFNetworking.

У меня есть 5 разных URL для запроса. Каждый запрос запускается, если предыдущий был корректно выполнен.

Это работает очень хорошо.

Я хочу остановить процесс синхронизации в любое время. Итак, мой код для этого:

- (void)cancelAllRequests
{
  NSLog(@"CancelAllRequests");

  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull"];
  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull_items"];
  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull_image"];
  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"POST" path:@"ws/webapp/services/push_item"];  
  [[[HTTPClient sharedClient] operationQueue] cancelAllOperations];
}

Но этот код, кажется, ничего не делает. Когда я хочу отменить, я вижу, что все пакетные операции работают в моих журналах после вызова метода.

Что я упустил ? Если я отменю запросы, это не остановит все активные операции, построенные с этими запросами?


person alex.bour    schedule 06.03.2012    source источник
comment
Что такое HTTPClient? Принадлежит ли он AFNetworking?   -  person Jason Zhao    schedule 15.06.2012
comment
Я думаю, что он имел в виду: AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; [[httpClient OperationQueue] отменаВсеОперации];   -  person Flaviu    schedule 14.07.2012


Ответы (1)


Вам нужно только сделать [[[HTTPClient sharedClient] operationQueue] cancelAllOperations]. Операции, когда они отменены, пытаются завершить выполнение, насколько это возможно, но нет никакой гарантии, как именно это произойдет. В случае пакетных операций они могут быть уже завершены к тому времени, когда они будут отменены, потому что все его операции запроса зависимостей завершены (путем отмены).

person mattt    schedule 06.03.2012
comment
Мэтт, у меня есть операция 1 => если все в порядке, операция 2 => если все в порядке => операция 3 =>, если все в порядке => очередь операций с множеством однотипных операций. Вот почему я не могу точно знать, когда пользователь останавливает операции... поэтому, если это операция 1 или 2, у меня нет очереди, поэтому я ставлю [[HTTPClient sharedClient] cancelAllHTTPoperationsWithMethod:@GET path:@ws/webapp /услуги/тянуть]; перед удалением очереди. - person alex.bour; 07.03.2012
comment
Программа Tanks с неопознанным селектором отправлена ​​в экземпляр. - person Oh Danny Boy; 20.10.2012