NSOperation executeSelectorOnMainThread вылетает - PullRequest
1 голос
/ 14 ноября 2009

Я звоню NSOperation из подпредставления NavigationController.

MyOperation *op = [[MyOperation alloc] target:self action:@selector(didFinishOperation)];

Операция загружает некоторые данные с сервера, анализирует их и затем отправляет

[target performSelectorOnMainThread:action withObject:nil waitUntilDone:YES];

когда работа сделана. Это вообще работает ...

Проблема в том, что когда я нажимаю кнопку возврата на навигационном контроллере, когда NSOperation выполняет свою работу, приложение вылетает, потому что действие ссылается на освобожденный экземпляр.

Я пытался сохранить операцию, но она все равно вылетает ...

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 14 ноября 2009

Крис на правильном пути, но он не охватывает случай, когда операция завершается, когда вы пытаетесь отменить ее, и она все равно будет аварийно завершена. Если операция выполняется в main, отмена не вступит в силу.

Тем не менее, попробуйте отменить его, прежде чем ваша цель будет уничтожена, но проверьте, что target все еще существует, прежде чем пытаться отправить ему сообщение. Кроме того, проверьте, отменены ли вы, прежде чем пытаться отправить сообщение:

if ( self.isCancelled ) return;
0 голосов
/ 14 ноября 2009

В вашем методе UIView dealloc вы можете отменить операцию и удалить ее из NSOperationQueue.

...