2013-11-20 30 views
5

Bu yüzden bir çocuk CCSprite nesnesi olan bir CCLayer nesnesi, bir koşul gerçekleştiğinde (bir güncelleme yöntemi ile tespit) kendisi aşağıdakiObj c NSNotificationCenter Kötü Erişim

[[NSNotificationCenter defaultCenter] postNotificationName:@"mymethod" object:nil]; 
çağırır denir CCSprite bir yöntem var

CCLayer sonra çıkarmak için CCSprite için

[node removeFromParentAndCleanup:YES]; 

çalıştırmak için devam ediyor. CCLayer de bu ince ve ancak bazen beklendiği gibi ben bildirim sonrası hattına işaret eden bir bad_access olsun çalışır init üzerinde 10 üzerinden

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

Şimdi 9 kez aşağıdaki çağırdı.

benzeri numaralı sorunları olan diğer kişiler hakkında okumamın sebebi, bunun nedeni, alt nesnenin kaldırılmasından kaynaklanıyor, ancak kaldırılmadan önce nasıl çağrıldığını bilmiyorum.

Çağrılan bildirimi geciktirmek için bir şey olabilir ve nesne kaldırıldıktan sonra sonlandırılıyor mu, yoksa yanlış ağacı mı havlıyor muyum? Ben kaldırma ve temizleme satırını açıklama ise

GÜNCELLEME

Eklendi kaldırma Yukarıdaki kod, bu olmaz.

+2

Çocuğu kaldırdığınız kodu postayla gönderebilir misiniz? Üst sınıfın sonunda bir cocos2d sınıfı ise, onExit yönteminde göndermek isteyebilirsiniz –

+0

. onExit, 'removeFromParent' döngüsü sırasında çağrılır ve gerçek kaldırma işleminden önce yürütülür. [Super onExit] için unutma. – YvesLeBorg

+0

Nesnenin hala "olup olmadığına" bakmak için "çıkarmayı" denediniz mi? – AntonijoDev

cevap

5

Gözlemciyi çıkarmanız gerekir. Gözlemciler otomatik olarak kaldırılmazlar, bu yüzden onları kaldırmazsanız, onları bellekte biriktirirsiniz, bu daha sonra kırılmasının nedeni olabilir.

+0

Mükemmel teşekkürler, aşağıdakileri ekledim dealloc metoduna [[NSNotificationCenter defaultCenter] removeObserver: self]; 'Ben bir test vereceğim. –

+0

ok umuyoruz – AntonijoDev

+0

Evet, bana iyi geliyor, artık hata üretemiyor. Teşekkürler! –