尝试发布通知时,我收到了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更干净之后进行同步调用以填充数据。
感谢您的投入,这让我头疼。 :)
克里斯
答案 0 :(得分:0)
错误EXC_BAD_ACCESS
是在没有初始化或向已发布对象发送消息的情况下释放对象时出错,有关EXC_BAD_ACCESS的详细信息,请查看this question
答案 1 :(得分:0)
问题证明是热图的创建和它共享的数据模型的填充之间的竞争条件。在热图创建完成之前,偶尔会出现填充(两者都是事件驱动的)。
我最终重新编写代码,以便持有Heatmap的类在Heatmap更干净之后进行同步调用以填充数据。
感谢您的投入,这让我头疼。 :)
克里斯