当前位置: 首页 > 知识库问答 >
问题:

错误参数#-2到“插入”(需要代理,得到零)

龚凯泽
2023-03-14

我有一个问题在这里我不知道如何解决这个问题,本尝试任何我知道解决这个仍然没有解决方案,请帮助

我有2个模块

主要的卢阿:

local comboBox = require( "dog" )

local a = display.newGroup()
local bang = {1,2,3}
local bang2 = {4,5,6}

local dog1 = comboBox.newComboBox( "Choose",100,200,100,32, "center", 32,bang)
local dog2 = comboBox.newComboBox( "Choose",200,100,100,32, "left", 32,bang2)

local b = display.newRect(0,0,10,10)

dog1:printAge()
dog2:printAge()

dog1:setTextColor(1,0,0)
dog2:setTextColor(0,1,1)

a:insert(b)
a:insert(dog1)-- error is here

外部模块dog.lua:

local comboBox = display.newGroup()
local nComboBox = display.newGroup()
local widget = require("widget")
local comboBox_mt = { __index = comboBox }  -- metatable
-- test = {}
-- local t = {}

-------------------------------------------------
-- PRIVATE FUNCTIONS
-------------------------------------------------

local function getDogYears( realYears ) -- local; only visible in this module
    -- return realYears * 7
end

--Scroll View

local function scrollListener( event )

local phase = event.phase
if ( phase == "began" ) then print( "Scroll view was touched" )
elseif ( phase == "moved" ) then print( "Scroll view was moved" )
elseif ( phase == "ended" ) then print( "Scroll view was released" )
end

-- In the event a scroll limit is reached...
if ( event.limitReached ) then
    if ( event.direction == "up" ) then print( "Reached top limit" )
    elseif ( event.direction == "down" ) then print( "Reached bottom limit" )
    elseif ( event.direction == "left" ) then print( "Reached left limit" )
    elseif ( event.direction == "right" ) then print( "Reached right limit" )
    end
end

return true
end

-- Create the scrollview widget
local function createScrollView(sx,sy,sWidth,sHeight,sList)
    -- body
    scrollView = widget.newScrollView
    {
    top = sy+sHeight/2,
    left = sx-sWidth/2,
    width = sWidth,
    height = sList*sHeight,
    scrollWidth = 0,
    scrollHeight = sList*sHeight,
    horizontalScrollDisabled = true,
    listener = scrollListener
}
-- scrollView.anchorX = 1
-- scrollView.anchorY = 0
return scrollView
end


--show drop box and its content
local function createDropDown(dx, dy, dWidth, dHeight, dList)

-- local dropRect = display.newRect(dx,dy+dHeight,dWidth,dHeight)
-- dropRect:setFillColor(1,1,0)
local newListContent = {}
Y = 0+dHeight/2

for i = 1,#dList do

    local optionsForList = {
        text = dList[i],     
        x = 0,
        y = Y,
        font = native.font,   
        fontSize = 32,
        align = "left" --new alignment parameter
    }

    newListContent[i] = display.newText(optionsForList)
    newListContent[i].anchorX = 0
    newListContent[i]:setFillColor(1,0,0)
    Y = Y + dHeight+1
    scrollView:insert(newListContent[i])
    nComboBox:insert(scrollView)
    end

end


--drop box
local function bringDropDown( self, event )
    -- body
local phase = event.phase
if phase == "began" then
    -- print(self.text)
elseif phase == "moved" then

else

    self.text = "Choose an Item"
    if self.state == "n" then
        createScrollView(self.x,self.y,self.width,self.height, #self.list)
        createDropDown(self.x,self.y,self.width,self.height, self.list)
    else

    end


end

return true

end
-------------------------------------------------
-- PUBLIC FUNCTIONS
-------------------------------------------------

--Create new ComboBox
function comboBox.newComboBox( name, cx, cy, cWidth, cHeight, cAlign, cFontSize, cList)     -- constructor

-- local autoincre = 0
-- local tContents = {}

local comboBoxTextOptions = {
    text = name,     
    x = cx,
    y = cy,
    width = cWidth,     --required for multi-line and alignment
    height = cHeight+1 ,
    font = native.font,   
    fontSize = cFontSize,
    align = cAlign --new alignment parameter
}

local comboBoxFill = display.newRect(cx,cy,cWidth,cHeight)
local tNewComboBox = {
    display.newText(comboBoxTextOptions),
    -- name = name or "Unnamed",
    -- age = ageInYears or 2
}
print(#cList)
tNewComboBox[1].touch = bringDropDown
tNewComboBox[1].name = name
tNewComboBox[1].state = "n"
tNewComboBox[1].list = cList
tNewComboBox[1]:addEventListener("touch",tNewComboBox[1])
nComboBox:insert(comboBoxFill)
nComboBox:insert(tNewComboBox[1])
return setmetatable( tNewComboBox, comboBox_mt )
end


-------------------------------------------------

function comboBox:setTextColor(cx,cy,cz)
self[1]:setFillColor(cx,cy,cz)
end

-------------------------------------------------


return comboBox, nComboBox

堆栈回溯

File: main.lua
Line: 36
Bad argument #-2 to 'insert' (Proxy expected, got nil)

stack traceback:
[C]: in function 'insert'
main.lua:36: in main chunk

现在还在想在这里做什么。这是唯一阻碍我项目的事情。请帮忙,谢谢:)

共有1个答案

魏凡
2023-03-14

不能将元表直接用于Corona显示对象。在这种情况下,newComboBox必须返回显示对象。

 类似资料:
  • 我不知道我做错了什么。。。我得到了球员的错误。draw()函数。它所说的不好的争论是在爱情中。图样矩形()方法。这意味着v.x是一个糟糕的论点。但它应该起作用。v.x和v.y都应该工作。因为它访问表或数组中元素的字段,对吗?有人能告诉我我做错了什么,以及如何解决这个问题吗?非常感谢!这是我的代码:

  • 当尝试ViewChild时,我会得到错误。错误为“未提供'opts'的参数。” @ViewChild都给出了错误。 ts(11,2):错误TS2554:应为2个参数,但得到1。

  • 我正在使用这段代码生成objects,但有时我会遇到这个错误(错误参数#-1到'addBody'(需要代理,得到零))知道为什么吗?

  • 编辑:我把单引号改成双引号,短绒没有抱怨。 我把这个放到jsonlint.com,我得到了这个错误: 其他json棉绒也有类似的结果。最初,数值是空的,所以我用单引号将它们括起来,以消除< code>jq错误: 但我还是为JQ买的。 我没有看到任何未定义的键,我错过了什么? 我还在网上看到一篇参考文章,不允许对密钥使用裸数字,公平地说,任何具有非字符串密钥的JSON都不应该通过测试吗?

  • 首先,我试图遵循这一指南。 到目前为止,我已经启动并运行了主机,但我在这一点上卡住了。我已经安装了windowsservercore映像,并且安装了IIS映像并将其标记为“WindowsServerIIS”。现在我需要安装ASP.NET4.5,我使用以下命令 docker Build-T windowsserveriisaspnet。 我也许应该添加我为我的Docker图像创建一个文件夹。所以我有

  • 这是一个Lua脚本,用于Corona SDK中的一个游戏。一开始(旧代码)效率很低,我不得不手动创建每道数学题,在其他人的帮助下(新代码),所以我得到了答案。 在控制台中,我现在看到了这个错误: