Mam do czynienia z problemem związanym z NSoperationQueue. W moim kodu w języku:Wywołanie - (void) cancelAllOperations na NSoperationQueue nie ustawia właściwości isCancelled of NSOperation, która jest obecna wewnątrz Queue
-(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];
}
So podczas realizacji mojego NSOperation główną funkcją kiedy jestem sprawdzania własności isCancelled zawsze zwraca NO. W rzeczywistości po wywołaniu cancellAllOperation na NSOperationQueue. np.
-(void)main
{
if(self.isCancelled)
{
// Never executing this block :-(
}
}
Więcej szczegółów robię kilka połączeń sieciowych w moim NSOperation.And kiedy przeszedłem do innego widoku przez ówczesnego cancelAllOperation jest powołany. I kiedy odpowiedź sieciowa wróciła do mojej NSOperation, sprawdzam czy (Self.isCancelled) i teraz jestem w innym widoku (znaczy, toCancelled powinien ustawić TAK). ale ta kontrola zawsze kończy się niepowodzeniem.
Czy jesteś pewien, że twoja operacja jeszcze się nie rozpoczęła, zanim zadzwonisz do cancelAllOperations? Będziesz musiał sprawdzić, czy ustawiona właściwość isCancelled jest ustawiona podczas wykonywania operacji. –
Konsekwentnie sprawdzam właściwość isCancelled w mojej głównej metodzie operacji. I debugowania przez punkty przerwania i stwierdził, że po wywołaniu metody cancelAllOperation, gdy połączenie wraca do tego punktu kontrolnego, jeśli (self.isCancelled) jego zawsze zwracając NO. – kidsid49
Czy zastępujesz metodę "cancel" w swojej NSOperation? Jeśli tak, możesz to opublikować? Jeśli nie, czy możesz przesłonić (wywołać super) i umieścić tam log lub punkt przerwania, aby sprawdzić, czy jest on wywoływany? –