Странный сбой NSNotificationCenter
-
05-10-2019 - |
Вопрос
Привет, ребята, У меня еще одна проблема.На этот раз с помощью NSNotificationCenter.Сейчас он выходит из строя, но несколько дней назад, когда я добавил уведомление, оно работало должным образом.За это время я добавил кое-какой код, который не имеет к этому никакого отношения...
У меня есть примерно плитки размером 10х10.Каждая плитка добавляет себя в качестве наблюдателя сразу после ее создания:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerJumped) name:@"TestNot" object:nil];
И в моем классе player каждый раз, когда прыжок заканчивается, я отправляю уведомление со следующим кодом:
if (self.postNotifications == YES) {
//Also post the notification for all the Tiles.
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNot" object:self];
}
Если я использую NSLog () в плитках, я вижу, что уведомление получают примерно 3 или 4 плитки.И после этого приложение завершает работу с EXC_BAD_ACCESS.В нем говорится objc_msgSend() selector name: playerJumped
.Но я не понимаю, почему.Я вижу, что это работает с первым, после чего он выходит из строя.В чем здесь моя ошибка?Не могли бы вы, пожалуйста, помочь мне!Сандро
Редактировать:Есть ли проблема, потому что уведомление получено примерно 100 объектами?
Решение
Ваш объект плитки был освобожден, но он все еще зарегистрирован в уведомлении, чтобы получать уведомления. Попробуйте добавить точку останова на методе Tile -dealloc, если это не то, что вы ожидаете.
Другие советы
У меня самого была такая же проблема.Добавление этого в класс решило проблему
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}