Jak natychmiast wymusić anulowanie NSOperation za pomocą AFNetworking?
Używam AFNetworking w mojej aplikacji i próbuję zaimplementować funkcję „Tap To Cancel” w moim HUD-ie postępu. Mam klasę singleton, która zarządza wszystkimi żądaniami HTTP. Jeśli HUD postępu jest stuknięty, dzwonię:
[[[HTTPRequestSingleton sharedClient] operationQueue] cancelAllOperations];
Ale to nie „anuluje” operacji, jakiej potrzebuję. Czytałem na tematNSOperationQueue
docs i natknąłem się na to:
Anulowanie obiektu operacji pozostawia obiekt w kolejce, ale powiadamia obiekt, że powinien przerwać swoje zadanie tak szybko, jak to możliwe. W przypadku aktualnie wykonywanych operacji oznacza to, że kod pracy obiektu operacji musi sprawdzać stan anulowania, zatrzymać działanie i oznaczyć się jako zakończony. W przypadku operacji oczekujących w kolejce, ale jeszcze nie wykonanych, kolejka musi nadal wywoływać metodę uruchomienia obiektu operacji, aby mogła przetworzyć zdarzenie anulowania i oznaczyć się jako zakończone.
A jeśli chodzi ocancelAllOperations
metoda:
Ta metoda wysyła komunikat anulowania do wszystkich operacji aktualnie w kolejce. Operacje w kolejce są anulowane przed rozpoczęciem wykonywania. Jeśli operacja jest już wykonywana, do tej operacji należy rozpoznanie anulowania i zatrzymanie tego, co robi.
Wydaje się, że moim problemem jest operacja, która już się wykonuje, którą chcę natychmiast anulować. W AFNetworking, jak mogę powiadomić operację, że powinna anulować i odrzucić wszystkie informacje o żądaniu?
Kod używany do działania
AFJSONRequestOperation *loginOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//operation was successful
if (loginOperation.isCancelled)
{
//can't do this. variable 'loginOperation' is uninitialized when captured by block
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
//operation failed
}];