繁体   English   中英

尝试调用方法“ removeSelf”(nil值)

[英]attempt to call method 'removeSelf' (a nil value)

由于某种原因,即使我检查它是否为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会删除与电晕相关的条目,从而将该对象保留为常规表。 因此,至少存在以下可能性:

  • 可能是您的代码已经删除playGroup作为另一个事件处理程序的一部分,或者
  • 处理程序被第二次召集,或者
  • playGroup被创建为常规表而不是显示对象。

有一两件事你可以做的是设置playGroup = nilremoveSelf因此,如果电晕遇到的是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的情况下playGroup print语句即可playGroup目的:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM