2010-09-26 95 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]; 

}