尝试调用方法'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' 方法(一个空值)

点赞
用户2054602
用户2054602

你应该销毁 v,而不是 k:

for k,v in pairs(playGroup) do
  if v ~= nil then
     v:removeSelf()
  end
end
2014-03-26 18:37:17
用户869951
用户869951

你不需要从一个组中删除对象,当你移除组时,Corona会自动帮你移除。所以,即使经过hades2510建议的修复之后,这个循环也是没有必要的。

你得到的错误信息,“尝试删除已经被删除的对象...”,提示 playGroup 是一个普通的表,而不是一个显示对象。对显示对象调用 removeSelf 会删除与Corona相关的条目,将对象留下作为普通的表。所以,至少有以下可能性:

  • 你的代码可能已经在另一个事件处理程序中删除了 playGroup
  • 处理程序被第二次调用,
  • playGroup 被创建为普通表而不是显示对象。

你可以在 removeSelf 之后将 playGroup = nil 设置为 nil 这样,如果Corona再次碰到 if 代码块,它就不会再尝试删除它:

if playGroup ~= nil then
    playGroup:removeSelf()
    --现在 playGroup 是普通表
    --不要再运行这个代码块:
    playGroup = nil
end

如果这确实修复了问题,那么最好还是确定一下在 playGroup 被从显示中移除后为什么 if 代码块还会被调用。一个print语句,不设置playGroup为nil,就可以解决问题:

if playGroup ~= nil then
    print('警告:将要从显示中移除游戏组')
    playGroup:removeSelf()
    print('警告:游戏组已从显示中移除')
end

一旦你知道原因,就可以再加回 playGroup = nil

2014-03-26 19:24:09
用户2409015
用户2409015

请确保您已经将对象插入到您的表格或分组中。如果您没有将对象插入到表格或分组中,然后尝试删除它,那么会产生这个错误。

2014-03-27 09:36:56