使用[cocos2d-x-2.2] 报错 function refid '%d' does not reference a Lua function

使用2.2版本的Cocos2dx,绑定lua,代码是lua的。简单说就是进入一个layer时,在layer上加载一个ccs做的widget(使用uihelper加载)之后取得里面的button注册回调函数function。
退出layer的时候将layer置空。
如此反复进入退出layer,开始没有问题过一段时间之后,点击button时,报 function refid ‘%d’ does not reference a Lua function?
之前注册的函数无法执行?因为cocos2dx lua engine判断该引用不是函数了

哪位大侠遇到过类似问题?是退出layer时清空操作没有做完全?
还是Cocos2dx版本过旧,uihelper的问题导致的?

不懂, 帮顶:867::867::867::867::867:

晕死,昨天自己绑定的AssetsManager也有这个问题……这是因为你没有成功绑定函数,但是你却想要在C中执行这个lua函数,就会报这个错,貌似就是这个样子:2:

绑定应该是成功的,开始执行的几次都没有问题,就是反复多次操作之后才会报这个错误。
你的也是这样么?开始没问题

我之前执行的时候写了(!handler) { do} 其实应该是 (handler) {do}
所以我如果没调用register的话,因为handler为空,所以便会do,然后报错
反而虽然我调用了register,但是handler不为空,所以也不会do

如果你是反复多次操作之后的问题,就可能是你的handler被释放掉了
一般都是注册之前先判断需不需要释放掉已经绑定的(handler不为空的话就先释放)
然后执行的话,要先判断handler是否为空,非空才去执行
其实你可以参考一下cocos的写法

我也遇到这个问题,正常执行几次后有概率出问题。。。 百思不得其解,版本2.1.3

我也遇到了这个问题,请问楼主的问题解决了吗?

我也是开始执行的几次都没有问题,就是反复多次操作之后才会报这个错误。请问这是怎么回事,如何解决的?

顶,不要沉啊~

我在Android平台上也遇到了这个问题而且概率很高,但在PC上运行是正常的一次也没出现过,在iOS模拟器上测试也一次没出现过。
怀疑与Android平台的Lua Engine有关,正在分析中…

问题解决,项目中派生了一个XXXSprite(C++),然后为了将LUA中的回调传给XXXSprite,在XXXSprite添加了registerEventScript和unregisterEventScript…
其中还有个整形变量m_nScriptHandler用于保存LUA中回调FUNCTION。
registerEventScript的实现(可参考CCNode)会先unregisterEventScript,就是说注册回调之前,先会解注册。在unregisterEventScript中会判断m_nScriptHandler的值,如果不是0就会解注册,过程理解了,出现这问题的原因就找到了m_nScriptHandler没有被初始化为0,所以在程序执行时这是个未知数,PC上一直没出现这问题,是因为在PC(64bit)中一直是负数。在Android上有可能是负数,也有可能是一个其他UIWidget注册的LUA FUNCTION的Number,比如"系统设置"这个按钮的LUA FUNCTION正好是15,而新创建的XXXSprite对象中的m_nScriptHandler正好也等于15(机率)。悲剧就发生了

:7::7::7::14::14::14:

我也遇到同样问题,游戏运行一会就会出现(android)。还在纠结中。。。。

你好,pirate310,你后来是怎么解决的呢?

具体是怎么解决的?

看了下源码,不过没看太明白。总结一下:unregister的时候把函数从lua环境(用对象作为key的一个map里面)中删除了,但是并没有把register的listener赋值为空,所以循环里面还是去执行这个lambda表达式,但是去lua环境去找这个函数没有,所以就报错了。