iOS(Xcode 4.3)postNotificatioName:object:userInfo:EXC_BAD_ACCESS失败

时间:2012-05-23 18:24:57

标签: ios xcode events notifications exc-bad-access

尝试发布通知时,我收到了EXC_BAD_ACCESS(代码= 2,地址= 0x8)错误。

偶尔我会看到:

-[__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和我的机器,甚至重新编写了所涉及的代码。同样的问题,我只是没有看到这个问题。

非常感谢任何见解。

干杯,

克里斯

==========更新(无法回答我自己的问题...)============

干杯,菲利普和响,这使我指向了正确的方向。

我明白EXC_BAD_ACCESS表示一个dealloc'd对象,但在这种情况下,由于系统的主类保留在有问题的对象(Heatmap)上,因此无法实现。

问题证明是热图的创建和它共享的数据模型的填充之间的竞争条件。在热图创建完成之前,偶尔会出现填充(两者都是事件驱动的)。

我最终重新编写代码,以便持有Heatmap的类在Heatmap更干净之后进行同步调用以填充数据。

感谢您的投入,这让我头疼。 :)

克里斯

2 个答案:

答案 0 :(得分:0)

错误EXC_BAD_ACCESS是在没有初始化或向已发布对象发送消息的情况下释放对象时出错,有关EXC_BAD_ACCESS的详细信息,请查看this question

答案 1 :(得分:0)

问题证明是热图的创建和它共享的数据模型的填充之间的竞争条件。在热图创建完成之前,偶尔会出现填充(两者都是事件驱动的)。

我最终重新编写代码,以便持有Heatmap的类在Heatmap更干净之后进行同步调用以填充数据。

感谢您的投入,这让我头疼。 :)

克里斯