2012-03-06 16 views
15

que realmente tiene un problema cuando quiero detener todas las solicitudes actuales en un motor de sincronización construido con AFNetworking.AFNetworking + cancelAllRequests

tengo 5 URL diferente para consultar. Cada consulta se inicia si la anterior se ejecutó correctamente.

Esto funciona muy bien.

que desea detener el proceso de sincronización en cualquier momento. Así que mi código para hacer esto es:

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

Pero este código parece no hacer nada. Cuando quiero cancelar, veo todas las operaciones por lotes trabajando en mis registros después de que se llama al método.

Qué me he perdido? Si cancelo las solicitudes, ¿esto no detiene todas las operaciones activas compiladas con estas solicitudes?

+0

¿Qué es HTTPClient? ¿Pertenece a AFNetworking? –

+2

Creo que lo que quiso decir fue: AFHTTPClient * httpClient = [[AFHTTPClient alloc] initWithBaseURL: url]; [[httpClient operationQueue] cancelAllOperations]; – Flaviu

Respuesta

26

Sólo es necesario hacer [[[HTTPClient sharedClient] operationQueue] cancelAllOperations]. Las operaciones cuando se cancelan intentan terminar la ejecución como sea posible, pero no hay garantía de cómo exactamente eso sucede. En el caso de las operaciones por lotes, puede que ya esté terminando en el momento en que se cancela debido a que todas sus operaciones de solicitud de dependencia han finalizado (al cancelarse).

+0

mattt, tengo la operación 1 => if ok operation 2 => if ok => operation 3 => if ok => operation queue con muchos de los mismos tipos de operaciones. Es por eso que no puedo saber exactamente cuándo el usuario detiene las operaciones ... así que si es la operación 1 o 2, no tengo cola, por eso puse [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod: @ "GET" ruta: @ " ws/webapp/services/pull "]; antes de eliminar la cola –

+0

Programa de tanques con selector no reconocido enviado a instancia. –

Cuestiones relacionadas