2012-05-23 3 views
0

Я получаю сообщение об ошибке 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

+0

После добавления 'self' в качестве наблюдателя, кажется, что объект' self' в настоящее время освобождаться. Какой объект обрабатывает уведомление и как он создается и сохраняется? –

+0

Cheers, Phillip. Это указывало мне в правильном направлении. Я понимаю, что EXC_BAD_ACCESS указывает объект dealloc'd, но в этом случае это было невозможно. – Raconteur

ответ

0

Проблема оказалась состояние гонки между созданием Heatmap и заполнением модели данных, которую она разделяет. Популяция происходила, иногда, до того, как была создана Heatmap (оба управляются событиями).

Я закончил переработку кода, чтобы класс, содержащий Heatmap, совершил синхронный вызов, чтобы заполнить данные после того, как Heatmap станет более чистым.

Спасибо за вход, он спас мне головную боль.:)

Chris

0

Ошибка EXC_BAD_ACCESS ошибка приходит освободив объект без инициализации или отправки сообщения в выпущенном объект, проверить this question для получения дополнительной информации о EXC_BAD_ACCESS