Я получаю сообщение об ошибке EXC_BAD_ACCESS (code = 2, address = 0x8) при попытке опубликовать уведомление.iOS (Xcode 4.3) postNotificatioName: object: userInfo: failed with EXC_BAD_ACCESS
Иногда я вижу:
-[__NSMallocBlock__ handleMessagesReceived:]: unrecognized selector sent to instance 0x9855cd0
Уведомление Почтовый код выглядит следующим образом:
NSDictionary *notificationInfo = [NSDictionary dictionaryWithObject:outputArray forKey:@"messages"];
[[NSNotificationCenter defaultCenter] postNotificationName:kMESocialHeatmapMessagesReceivedNotification object:nil userInfo:notificationInfo];
Код наблюдателя выглядит следующим образом (это единственный обработчик для этого уведомления):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMessagesReceived:) name:kMESocialHeatmapMessagesReceivedNotification object:nil];
И код обработчика:
- (void)handleMessagesReceived:(NSNotification *)notification {...}
Я очистил проект (CMD-SHIF-K, CMD-ALT-SHIFT-K и удалил производные данные от Организатора), перезапустил как Xcode, так и мою машину и даже переписал задействованный код. Такая же проблема, и я просто не вижу этой проблемы.
Любое понимание очень понравилось.
Приветствия,
Chris
========== UPDATE (не может ответить на мой собственный вопрос ...) ============
Cheers, Phillip и позвонил, что указал мне в правильном направлении.
Я действительно понимаю, что EXC_BAD_ACCESS указывает объект dealloc'd, но в этом случае это просто невозможно, так как основной класс системы удерживался на рассматриваемом объекте (Heatmap).
Проблема оказалась состоянием гонки между созданием Heatmap и заполнением модели данных, которую она разделяет. Популяция происходила, иногда, до того, как была создана Heatmap (оба управляются событиями).
Я закончил переработку кода, чтобы класс, содержащий Heatmap, совершил синхронный вызов, чтобы заполнить данные после того, как Heatmap станет более чистым.
Спасибо за вход, он спас мне головную боль. :)
Chris
После добавления 'self' в качестве наблюдателя, кажется, что объект' self' в настоящее время освобождаться. Какой объект обрабатывает уведомление и как он создается и сохраняется? –
Cheers, Phillip. Это указывало мне в правильном направлении. Я понимаю, что EXC_BAD_ACCESS указывает объект dealloc'd, но в этом случае это было невозможно. – Raconteur