У меня есть представление, которое загружает данные через NSOperation в NSOperationQueue.Я хочу разрешить пользователям выходить из этого представления до завершения операции.Моя проблема в том, что я не могу последовательно делать это без сбоев.Вот мой код для запуска операции:
NSOperationQueue* tmpQueue = [[NSOperationQueue alloc] init];
self.queue = tmpQueue;
[tmpQueue release];
SportsLoadOperation* loadOperation = [[SportsLoadOperation alloc] init];
[loadOperation addObserver:self forKeyPath:@"isFinished" options:0 context:NULL];
[self.queue addOperation:loadOperation];
[loadOperation release];
Если я покидаю представление, когда операция все еще выполняется, я часто получаю эту ошибку:
[SportsViewController retain]: message sent to deallocated instance 0x38b5a0
Если я пытаюсь удалитьнаблюдатели, чтобы этого не произошло, например:
-(void)viewWillDisappear:(BOOL)animated {
if (self.isLoadingData) {
for (NSOperation *operation in [self.queue operations]) {
if([operation isExecuting]) {
[operation cancel];
[operation removeObserver:self forKeyPath:@"isFinished"];
}
}
}
[super viewWillDisappear:animated];
}
Тогда я иногда получаю эту ошибку:
Terminating app due to uncaught exception 'NSRangeException', reason:
'Cannot remove an observer <SportsViewController 0x661c730> for the key path "isFinished" from <SportsLoadOperation 0x66201a0> because it is not registered as an observer.'
Как мне избежать этих проблем?