2013-11-20 13 views
5

So habe ich ein CCLayer Objekt, das ein Kind CCSprite Objekt hat, wenn eine Bedingung, ein Verfahren der CCSprite genannt (durch eine Update-Methode erfaßt wird) geschieht, die sich die folgende nennenObj-c NSNotificationCenter Bad Zugang

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

die CCLayer geht dann auf

[node removeFromParentAndCleanup:YES]; 

für die CCSprite zu laufen, es zu entfernen. Die CCLayer genannt auch die folgenden auf init

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

Jetzt 9 von 10 ist es in Ordnung und funktioniert wie aber gelegentlich erwartete ich eine bad_access erhalten Hinweis auf die Mitteilung Post Linie.

Meine Vermutung aus dem Lesen über andere Leute mit ähnliche Probleme ist, dass dies ist, weil das Kind-Objekt entfernt wurde, aber ich weiß nicht, wie sonst es zu tun, wie es aufgerufen wird, bevor es entfernt wird.

Könnte etwas passieren, um die Nachbenachrichtigung zu verzögern, und es wird aufgerufen, nachdem das Objekt entfernt wurde oder ich den falschen Baum anbreche?

UPDATE

Added Entferncode oben, wenn ich das Entfernen und Bereinigung Zeile aus kommentieren es nicht geschieht.

+2

können Sie den Code veröffentlichen, in dem Sie das Kind entfernen? –

+0

Sie möglicherweise in der OnExit-Methode veröffentlichen möchten, wenn die Elternklasse schließlich eine Cocos2D-Klasse ist. onExit wird während des Zyklus 'removeFromParent' aufgerufen und vor dem eigentlichen Entfernen ausgeführt. Vergiss nicht [super onExit]. – YvesLeBorg

+0

Haben Sie versucht, das Objekt zu "entfernen", nur um zu sehen, ob es noch passiert? – AntonijoDev

Antwort

5

Sie müssen den Beobachter entfernen. Beobachter werden nicht automatisch entfernt. Wenn Sie sie also nicht entfernen, stapeln Sie sie im Speicher. Das könnte der Grund sein, dass sie später unterbrochen wird.

+0

Excellent thanks, ich habe meiner dealloc-Methode folgendes hinzugefügt: [[NSNotificationCenter defaultCenter] removeObserver: self]; 'Ich werde es testen. –

+0

ok hoffe es funktioniert – AntonijoDev

+0

Yep scheint gut zu mir, kann den Fehler nicht mehr produzieren. Vielen Dank! –