试图调用方法' removeSelf' (零值)

时间:2014-03-26 18:23:02

标签: sdk lua corona null

出于某种原因,我无法移除群组对象,即使我检查它是否为零

我尝试过的第一件事:

if playGroup~=nil then 
   playGroup:removeSelf() 
end
  

错误:尝试删除已从中删除的对象   阶段或其父/祖先组已被删除。

我也试过这个:

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

错误:尝试调用方法' removeSelf' (零值)

3 个答案:

答案 0 :(得分:0)

你应该销毁v而不是k:

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

答案 1 :(得分:0)

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

您收到的错误,"尝试删除已被删除的对象..."表明playGroup是常规表而不是显示对象。在显示对象上调用removeSelf会删除与Corona相关的条目,将对象保留为常规表。所以至少有这些可能性:

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

您可以做的一件事是在playGroup = nil之后设置removeSelf,这样如果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

如果这确实解决了问题,那么在if从显示中删除后,可能仍然值得确定调用playGroup块的原因。没有将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

答案 2 :(得分:0)

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