在UI中假如Button,代码中回调removeFromParentAndCleanup(true)报错

加入一个Button作为一个窗口关闭按钮
但在代码回调中写的
if(type != Widget::TouchEventType::ENDED) return;

this->removeFromParentAndCleanup(true);

然后在这里就会报错

这是什么原因嘛? 有解决的方法嘛?

有报错信息嘛?
有堆栈嘛?

你看看堆栈嘛。
源码就在你手上嘛。

GameOne.exe!cocos2d::ui::Widget::onTouchEnded(cocos2d::Touch * touch, cocos2d::Event * unusedEvent) 行 709 C++
外部代码]
GameOne.exe!cocos2d::EventDispatcher::dispatchTouchEvent::__l65::(cocos2d::EventListener * l) 行 906 C++

直接指向UIWidget->onTouchEnded中的releaseUpEvent();

大体上,方法肯定没问题。主要看看你在写代码的时候,逻辑是否有问题。是不是在你不知道的时候,这个方法被执行过了,指针已经被释放了。再去操作,肯定会崩溃。检查下你的代码。
就目前写的这个代码都有问题。除了按下结束状态,还有按下开始和按下滑动两个状态。越过你的判断。要写某一个判断,尽量就判断一个状态。建议你改成下面的。
if(type == Widget::TouchEventType::ENDED)

this->removeFromParentAndCleanup(true);
return;

这样还是同样的问题

我在想,会不会是因为Button回调会执行两个状态的,跟这个会不会有关系
不过我也是在ENDED里调用的。

好了

我在把json加载进来后retain了一下,然后就可以了。
应该是它自动release了吧

不敢说,你这个方法是否有问题。可能不崩了。但是内存可能没有释放。因为多了一个引用计数。
还是建议检查下,你的逻辑是否存在问题。确认没问题,或者你也找不出来。那就只能按你现在的情况做了。

嗯 好的 谢谢指导哦!

不是END的时候移出,那END怎么执行?明显指针错误

这问题好像从3.0alpha开始就一直存在的,ccs的控件,我用lua,c++里类似,要runAction(cc.CallFunc:create(function() removeFromxxx() end)),就是下一帧remove,不能在事件处理的函数里remove自己,ccs的控件,哎,野种就是没亲生的好