2011-12-21 9 views
9

cancelAllOperations() non funziona su mainQueue (il metodo cancel() non viene chiamato sull'oggetto NSOperation). Mi sto perdendo qualcosa? Devo ripetere tutte le operazioni e chiamare il metodo cancel() per farlo funzionare.cancelAllOperations non funziona per [NSOperationQueue mainQueue]

+1

abbastanza sicuro che ho visto 'lavoro -cancelAllOperations' bene. Forse hai bisogno di fornire più contesto. –

+0

fallendo per me nel modo descritto, oggi – Bryan

+0

So che questa è una vecchia domanda, ma tu dici che stai usando 'mainQueue' per' NSURLConnection'. Probabilmente si vorrà usare una coda personalizzata per operazioni basate su 'NSURLConnection', non' mainQueue', comunque (si può usare 'maxConcurrentOperationCount' per godere della concorrenza mentre si controlla il grado di concorrenza). Se si utilizza 'NSURLConnection' basato sui delegati, è ancora possibile pianificare la connessione sulla coda principale (o creare il proprio' NSThread' con il proprio runloop, come fa AFNetworking). Ma probabilmente vorrai usare la coda personalizzata per le operazioni, loro stesse. – Rob

risposta

5

Posso anche confermare che cancelAllOperations non funziona su [NSOperationQueue mainQueue] (almeno sul mio iOS 5.0 Simulator). Potrebbe essere intenzionalmente progettato in questo modo poiché è un'istanza condivisa.

mio semplice soluzione è solo alla sottoclasse NSOperation o NSBlockOperation senza sostituire nulla e poi fare qualcosa di simile:

-(void)cancelMyOperationsInMainQueue {  
    for (NSOperation* o in [[NSOperationQueue mainQueue] operations]) { 
     if ([o isKindOfClass:[MyOperation class]]) { 
      [o cancel]; 
     } 
    } 
} 
0

Si può anche confermare non chiama annullare il metodo sulle operazioni, semplicemente imposta isCancelled = YES

La mia soluzione: [[[NSOperationQueue mainQueue] operations] makeObjectsPerformSelector:@selector(cancel)];

Problemi correlati