2012-09-27 11 views
5

Quiero cancelar todas las solicitudes. Así es como estoy creando conexión asíncrona:NSURLConnection asincrónico y NSOperation - cancelando

[NSURLConnection sendAsynchronousRequest:echo queue:self.queue completionHandler:^(NSURLResponse *respone, NSData *data, NSError *error){ 

entonces utilizar este método:

-(void)cancelAllRequests 
{ 
    NSLog(@"%@",self.queue.operations); 
    [self.queue cancelAllOperations]; 
    [self.queue waitUntilAllOperationsAreFinished]; 
} 

para cancelar todas las solicitudes.

Que realmente no hace nada excepto cambiar un BOOL a SÍ.

Entonces, ¿cómo se supone que debo cancelar una conexión asíncrona?

Respuesta

5

Usted no puede cancelar conexiones programadas usando sendAsynchronousRequest. La cola a la que se refiere solo se usa para programar la ejecución de finalización.

Si desea un control total de NSURLConnection, tendrá que implementar el NSURLConnectionDelegate usted mismo. Puede encontrar una implementación de ejemplo en https://gist.github.com/3794804

+0

Voy a compartir una esencia a esto en unos minutos. – leo

1

Lo que podría hacer es poner las solicitudes sincrónicas en una operación (usando un bloque).

El conjunto NSOperationQueue maxNumberOfConcurrentOperations a 1 (por lo que se ejecutan uno a la vez).

Entonces si ejecuta cancelAllOperations en la cola se detendrá cualquier operación que no se han ejecutado todavía.