【发布时间】:2013-11-20 17:50:44
【问题描述】:
所以我有一个 CCLayer 对象,它有一个子 CCSprite 对象,当条件发生时(由更新方法检测到),调用 CCSprite 的一个方法,该方法本身调用以下内容
[[NSNotificationCenter defaultCenter] postNotificationName:@"mymethod" object:nil];
CCLayer 然后继续运行
[node removeFromParentAndCleanup:YES];
让 CCSprite 删除它。 CCLayer 在 init 上也调用了以下代码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mymethod) name:@"mymethod" object:nil];
现在 10 次中有 9 次这很好并且可以按预期工作,但是偶尔我会收到一个 bad_access 指向通知帖子行。
我从阅读其他人有类似问题的猜测是,这是因为子对象已被删除,但我不知道该怎么做,因为它在它之前被调用被删除。
是否会发生一些事情来延迟发布通知的调用,并且在对象被移除后最终会被调用,或者我是在找错树了吗?
更新
在上面添加了删除代码,如果我注释掉删除和清理行,它就不会发生。
【问题讨论】:
-
你能把删除孩子的代码贴出来吗?
-
如果父类最终是 cocos2d 类,您可能希望在 onExit 方法中发布。 onExit 在“removeFromParent”循环期间被调用,并在实际删除之前执行。不要忘记 [super onExit]。
-
您是否尝试过或“移除”该对象,只是为了看看它是否仍然发生?
-
感谢您的快速回复,请参阅上面的修改。
标签: ios objective-c cocos2d-iphone nsnotificationcenter