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”(用户数据值)