NSOperation заканчивается в фоновом режиме, пытается уведомить основной поток, представление больше не существует. авария - PullRequest
1 голос
/ 19 мая 2011

NSOperation работает не в главном потоке.Он создается из UITableViewController.Когда операция будет завершена, я бы хотел перезагрузить таблицу, так как некоторые данные изменились.Я установил делегата для фона, чтобы уведомить о завершении.Когда это будет сделано, я вызываю обертку вокруг reloadData специально для основного потока, используя executeSelectorOnMainThread.

По большей части это работает хорошо, однако есть вероятность, что исходный (edit) tableViewController (/ edit) не будет равен 0, и я получу вызовы зомби.

Таким образом, вопрос состоит из 2 частей:

  1. Можно ли получить делегата из фонового потока без сохранения объекта?
  2. Это просто плоходизайн?Должен ли я использовать NSNotifications вместо этого?Будет ли это предпочтительным способом уведомления в этом случае?

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

1 Ответ

1 голос
/ 19 мая 2011

Делегат должен быть сохранен, если есть вероятность, что он может быть освобожден до вызова какой-либо операции над делегатом. Вы можете установить состояние в tableViewController для обработки случая, когда вызывается обратный вызов делегата, а tableViewController не должен использоваться (в основном, обратные вызовы действуют как неактивные). После завершения операции просто отпустите объект делегата.

Это неплохой дизайн, но вам просто нужно справиться с этими условиями.

...