Sono di fronte a un problema relativo a NSoperationQueue. Nel mio codice in:La chiamata - (void) cancelAllOperations su NSoperationQueue non sta impostando la proprietà isCancelled di NSOperation che è presente all'interno della coda
-(void) viewDidLoad
{
//Initialisation of queue and operation.
//adding operation to queue
[self.operationQueue addOperation:op];
}
-(void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.operationQueue cancelAllOperations];
}
Così durante l'esecuzione della mia funzione principale NSOperation quando sto controllando per la proprietà isCancelled restituisce sempre NO. Infatti dopo aver chiamato cancellAllOperation su NSOperationQueue. es.
-(void)main
{
if(self.isCancelled)
{
// Never executing this block :-(
}
}
Per maggiori dettagli sto facendo alcune chiamate di rete nel mio NSOperation.And quando sono passato a altra vista da allora cancelAllOperation viene richiamato. E quando la risposta di rete è tornata a nel mio NSOperation sto controllando se (Self.isCancelled) e ora sono in un'altra vista (significa isCancelled dovrebbe impostare SÌ). ma questo controllo fallisce sempre.
Sei sicuro che l'operazione non sia già iniziata quando si chiama cancelAllOperations? Dovrai controllare che la proprietà isCancelled sia impostata durante l'esecuzione della tua operazione. –
Sto verificando costantemente la proprietà isCancelled nel mio metodo main di funzionamento. Effettuo il debug attraverso i punti di interruzione e ho scoperto che dopo aver chiamato il metodo cancelAllOperation quando la chiamata ritorna a questo checkpoint se (self.isCancelled) ha sempre restituito NO. – kidsid49
Stai sovrascrivendo il metodo 'cancel' su NSOperation? Se è così, puoi pubblicarlo? In caso contrario, puoi ignorare, (chiama super) e inserire un log o un breakpoint per vedere se è chiamato? –