尝试使用事件侦听器时发生索引错误

Index error occurs when trying to use an event listener

我正在尝试向正在加载的图像对象添加触摸事件侦听器。尽管这实际上是文档中的精确复制和粘贴: https://docs.coronalabs.com/api/type/EventDispatcher/addEventListener.html

它returns出现以下错误:

36:尝试索引本地 'object'(零值)

local t = {}
local img = {}
local i = 1

local function showImages ()
    local function networkListenerImg( event )
        if ( event.isError ) then
            print ( "Network error - download failed" )
        else
            event.target.alpha = 0
            transition.to( event.target, { alpha = 1.0 } )
        end
    end

    for k,v in pairs(t) do
        img[#img + 1] = v
    end

    local object = display.loadRemoteImage( event.params.chapter .. img[i], "GET", networkListenerImg, img[i], system.TemporaryDirectory, 50, 50 )

    function object:touch( event )
        if event.phase == "began" then
            print( "You touched the object!" )
            return true
        end
    end

    object:addEventListener( "touch", object )

end

table, t, 在代码的其他地方填充并且正确填充。

虽然你没有提到哪一行是第 36 行(那里只有 28 行),但我仍然可以看出你的错误。问题是 object 是并且永远是 nildisplay.loadRemoteImage() 没有 return 任何东西,请参阅 this

您需要做的是让您的侦听器回调捕获 object,它必须在回调之前声明。然后回调应该将对象的值设置为下载的结果。像这样...

local t = {}
local img = {}
local i = 1

local function showImages ()

    local object
    local function networkListenerImg( event )
        if ( event.isError ) then
            print ( "Network error - download failed" )
        else
            event.target.alpha = 0
            transition.to( event.target, { alpha = 1.0 } )
            -- fill in code to save the download object into "object"
        end
    end

    for k,v in pairs(t) do
        img[#img + 1] = v
    end

    display.loadRemoteImage( event.params.chapter .. img[i], "GET", networkListenerImg, img[i], system.TemporaryDirectory, 50, 50 )

    function object:touch( event )
        if event.phase == "began" then
            print( "You touched the object!" )
            return true
        end
    end

    object:addEventListener( "touch", object )

end