2012-03-06 12 views
15

Naprawdę mam problem, gdy chcę zatrzymać wszystkie bieżące żądania w silniku synchronizacji zbudowanym za pomocą AFNetworking.AFNetworking + cancelAllRequests

Mam 5 różnych adresów URL do zapytania. Każde zapytanie jest uruchamiane, jeśli poprzednie zostało poprawnie wykonane.

To działa bardzo dobrze.

Chcę zatrzymać proces synchronizacji w dowolnym momencie. Więc mój kod, aby to zrobić jest:

- (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]; 
} 

Ale ten kod zdaje się nic nie robić. Kiedy chcę anulować, zobaczyłem wszystkie operacje wsadowe działające w moich dziennikach po wywołaniu metody.

Czego mi brakowało? Jeśli anuluję żądania, nie zatrzyma to wszystkich aktywnych operacji budowanych z tymi żądaniami?

+0

Co to jest HTTPClient? Czy należy do AFNetworking? –

+2

Myślę, że miał na myśli: AFHTTPClient * httpClient = [[AFHTTPClients alloc] initWithBaseURL: url]; [[httpClient operationQueue] cancelAllOperations]; – Flaviu

Odpowiedz

26

Powinieneś tylko wykonać [[[HTTPClient sharedClient] operationQueue] cancelAllOperations]. Operacje, które zostały anulowane, próbują zakończyć wykonywanie, ale nie ma gwarancji, jak dokładnie to się stanie. W przypadku operacji wsadowych może już kończyć się do czasu anulowania, ponieważ wszystkie operacje związane z żądaniem zależności zostały zakończone (po anulowaniu).

+0

mattt, Mam operację 1 => jeśli operacja ok 2 => jeśli ok => operacja 3 => jeśli ok => kolejka operacji z wieloma tego samego rodzaju operacjami. Dlatego nie wiem dokładnie, kiedy użytkownik zatrzymuje operacje ... więc jeśli jest to operacja 1 lub 2, nie mam kolejki, dlatego wstawiam [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod: @ "GET" ścieżka: @ " ws/webapp/services/pull "]; przed usunięciem kolejki. –

+0

Program zbiorczy z nierozpoznanym selektorem wysłanym do instancji. –