Ответ 1
Один из ваших подписчиков освобожден. Обязательно вызовите [[NSNotificationCenter defaultCenter] removeObserver:self]
в своем dealloc (если не раньше).
A UIViewController
добавляет себя к центру по умолчанию:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(editFood)
name:@"editFood"
object:nil];
Затем a UITableView
делегат NSObject отправляет a NSNotification
:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"editFood"
object:self];
Во время выполнения он получает исключение EXC_BAD_ACCESS.
Выпускается ли defaultCenter
где-нибудь? Эта же концепция работает, когда я отправляю уведомление в UIViewController из UIViewController, но это не имеет значения, правильно?
Один из ваших подписчиков освобожден. Обязательно вызовите [[NSNotificationCenter defaultCenter] removeObserver:self]
в своем dealloc (если не раньше).
EXC_BAD_ACCESS
может произойти даже после проверки того, что dealloc существует следующим образом:
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]
}
Вышеупомянутая проблема будет решаться большую часть времени, но, по-видимому, моя причина заключалась в том, что я косвенно добавлял наблюдателя с selector:
в значение nil
следующим образом:
[NSNotificationCenter.defaultCenter addObserver:self
selector:nil
name:notificationName
object:nil];
... поэтому, когда я отправил что-то с этим notificationName
, EXC_BAD_ACCESS
.
Решение заключалось в том, чтобы отправить селектор, который на самом деле указывает на что-то.