Sdk 尝试调用方法';移除自身';(零值)

Sdk 尝试调用方法';移除自身';(零值),sdk,lua,coronasdk,null,Sdk,Lua,Coronasdk,Null,由于某些原因,我无法删除组对象,即使我检查它是否为零 我尝试的第一件事: if playGroup~=nil then playGroup:removeSelf() end 错误:尝试删除已从中删除的对象 已删除其父/祖先组的阶段或 我也试过: for k,v in pairs(playGroup) do if k ~= nil then k:removeSelf() end end 错误:尝试调用方法“removeSelf”(一个nil值) 你应该

由于某些原因,我无法删除组对象,即使我检查它是否为零

我尝试的第一件事:

if playGroup~=nil then 
   playGroup:removeSelf() 
end
错误:尝试删除已从中删除的对象 已删除其父/祖先组的阶段或

我也试过:

for k,v in pairs(playGroup) do
    if k ~= nil then
        k:removeSelf()
    end
end
错误:尝试调用方法“removeSelf”(一个nil值)


你应该摧毁v而不是k:

for k,v in pairs(playGroup) do
  if v ~= nil then
     v:removeSelf()
  end
end

您不需要从组中删除对象,Corona会在删除组时为您执行此操作。因此,不需要循环(即使在hades2510提出的修复之后)

出现的错误“尝试删除已删除的对象…”表明
playGroup
是一个常规表,而不是一个显示对象。在显示对象上调用
removeSelf
将删除与Corona相关的条目,使对象保持为常规表。因此,至少有以下几种可能性:

  • 可能是您的代码已经删除了另一个事件处理程序中的
    playGroup
    ,或者
  • 处理程序被第二次调用,或者
  • playGroup是作为常规表而不是显示对象创建的
您可以做的一件事是在
removeSelf
之后设置
playGroup=nil
,这样,如果Corona再次遇到
if
块,它将不会再次尝试移除它:

if playGroup ~= nil then 
    playGroup:removeSelf() 
    -- now playGroup is plain table
    -- dont' want to run this block of code again: 
    playGroup = nil
end
如果这确实解决了问题,那么可能仍然值得确定在从显示中删除
playGroup
后调用
If
块的原因。打印语句,而不将
playGroup
设置为nil,将执行以下操作:

if playGroup ~= nil then 
    print('WARNING: Going to remove play group from display')
    playGroup:removeSelf() 
    print('WARNING: Play group removed from display')
end

知道原因后,可以重新添加
playGroup=nil

确保已将对象插入表或组中。如果不在表或组中插入对象并尝试将其删除,则会产生此错误。

它会给出一个错误:
尝试索引本地“v”(用户数据值)