RemoveEventListener:nil键在属性查找中提供

我创建了一个组,并添加了下面的事件侦听器调用一个函数:

catinBalloon:addEventListener("touch", catinBalloontouch)

后来,我将两个对象插入到组 catinBalloon,并将组添加到表中:

table.insert(catandBalloonTable,#catandBalloonTable+1,catinBalloon)

作为另一个函数的一部分,我想循环访问表以删除侦听器事件:

for i=#catandBalloonTable,1-1 do
print_r(catandBalloonTable[i])
 catandBalloonTable[i]:removeEventListener("touch", catinBalloontouch)

end

在错误之前的 print_r 的输出是:

04:20:03.364  table: 0DACC088 {
04:20:03.364   [_proxy]=>userdata:0DAD20E0
04:20:03.364   [_functionListeners]=>table:0DACC088 {
04:20:03.364                             [touch]=>table:0DADA0C0 {
04:20:03.364                                          [1]=>function:04080198
04:20:03.364                                          [2]=>function:0DA0E6E0
04:20:03.364                                        }
04:20:03.364                           }
04:20:03.364   [activeObjectWord]=>“ant”
04:20:03.364   [_class]=>table:0DACC088 {
04:20:03.364                 [removeEventListener]=>function:04245CE8
04:20:03.364                 [addEventListener]=>function:04247968
04:20:03.364                 [__index]=>table:0425AE40 {
04:20:03.364                                *table:0425AE40
04:20:03.364                              }
04:20:03.364               }
04:20:03.364   [removeSelf]=>function:0433B9B8
04:20:03.364   [active]=>“yes”
04:20:03.364   [activeObjectSound]=>userdata:0A0CAAE0
04:20:03.364 }

错误是:

04:20:03.364  错误:nil键提供了属性查找。
04:20:03.364  堆栈回溯:
04:20:03.364   [C]:?
04:20:03.364   ?:在函数'removeEventListener'04:20:03.364   ?:在函数'removeEventListener'04:20:03.364   ?:在函数'removeEventListener'

谢谢。

点赞
用户7026995
用户7026995

当你提供的处理函数(catinBalloontouch)在这个作用域中不存在时,会出现该错误。一种解决问题的方法是使用前向引用。

-- 文件顶部
local catinBalloontouch
...
function catinBalloontouch( event ) -- 现在你不需要使用关键字 local
    ...
end
...
for i = #catandBalloonTable, 1, -1 do
print_r(catandBalloonTable[i])
    catandBalloonTable[i]:removeEventListener( "touch", catinBalloontouch)

end
2017-05-04 06:35:55