2010-09-26 93 views
4

嘿伙计, 我有另一个问题。这次与NSNotificationCenter。现在它崩溃了,但几天前,当我添加通知时,它正常工作。在我之间添加了一些代码,与之无关......奇怪的NSNotificationCenter崩溃

我有大约10x10瓷砖。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerJumped) name:@"TestNot" object:nil]; 

而在我的播放器类,每一跳结束时,我张贴用下面的代码一个通知:

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。但我不明白为什么。我发现它与第一个一起工作比它崩溃。 这里有什么我的错误?你能帮我么! Sandro

编辑:有没有问题,因为约100个对象收到通知?

回答

9

您的磁贴对象已取消分配,但仍会向notificationCenter注册以接收通知。如果这不是您所期望的,请尝试在tile的-dealloc方法上添加断点。

+0

这很奇怪。我只是测试它,你是对的。瓦片被取消分配。但我不知道为什么。我会看看发生了什么...... xD – 2010-09-26 11:50:20

+1

太好了。就是这样。在我将瓷砖添加到其他一些场景之间的时间。在这些场景中,瓦片会被取消分配,但不会作为观察者移除。所以崩溃发生了......谢谢! – 2010-09-26 12:04:49

10

自己也有同样的问题。 将此添加到课程中解决了问题

- (void) dealloc 
{ 

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

}