void CCMenuItem::activate()
{
if (m_bIsEnabled)
{
if (m_pListener && m_pfnSelector)
{
(m_pListener->*m_pfnSelector)(this);
}
if (kScriptTypeNone != m_eScriptType)
{
CCScriptEngineManager::sharedManager()->getScriptEngine()->executeMenuItemEvent(this);
}
}
}
Bug的位置
Bug发生时间:
点击一个CCMenuItem CCMenuItem的回调函数Remove他本身。
调用堆栈
Bug的位置
根据大神们的分析,这个Bug产生的理由是在CCMenuItem的回调函数中有Remove CCMenuItem的行为,当点击时,Delete了CCMenuItem但是CCMenuItem之前委托了在TouchDispathcer与里面的动作不能被取消,如CCTouchEnd,然后CCTouchEnd回来回调CCMenuItem,但此时的CCMenuItem已经被Release掉了。所以就出现了Bug。
然后上网好像有很多解决方案,但是么有一个能解决我的问题。Orz...TAT...
附上其他大神的解决方案
http://www.cocos2d-iphone.org/forums/topic/cctouchdispatcher-bug-ccmenu-bug/
http://hi.baidu.com/ligh0721/item/6bd9c5929930cbd87a7f01ee
或者直接Google CCMenuItem Bug