2013-11-20 55 views
5

所以我有有一個孩子CCSprite對象CCLayer對象,當條件發生(由更新的方法檢測)的CCSprite的方法被調用本身調用下面對象 - NSNotificationCenter錯誤訪問

[[NSNotificationCenter defaultCenter] postNotificationName:@"mymethod" object:nil]; 

的CCLayer然後繼續爲CCSprite刪除它運行

[node removeFromParentAndCleanup:YES]; 

。該CCLayer還呼籲初始化以下

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

現在9次了10年,這是罰款和工作原理不過偶爾預期我得到指着通知後線bad_access。

我從閱讀其他人的猜測類似的問題是,這是因爲子對象已被刪除,但我不知道如何去做它,因爲它被刪除之前被調用。

是否有可能發生延遲後通知被調用,並最終被調用後對象被刪除或我吠叫錯誤的樹?上述

UPDATE

新增移除代碼,如果我註釋掉刪除和清理線也不會發生。

+2

你可以在哪裏刪除孩子嗎? –

+0

如果父類最終是一個cocos2d類,您可能需要在onExit方法中發佈。 onExit在'removeFromParent'循環期間被調用,並且在實際刪除之前執行。不要忘記[super onExit]。 – YvesLeBorg

+0

有沒有嘗試過或「刪除」的對象,只是爲了看看它是否仍然發生? – AntonijoDev

回答

5

您需要刪除觀察者。觀察者不會自動移除,所以如果你沒有移除它們,那麼你將它們堆疊在內存中,這可能是它稍後中斷的原因。

+0

非常感謝,我將下面的內容添加到了我的dealloc方法'[[NSNotificationCenter defaultCenter] removeObserver:self];'我會給它一個測試。 –

+0

好希望它能正常工作 – AntonijoDev

+0

對我來說好像不錯,再也不會產生這個bug了。謝謝! –