在尝试使用事件监听器时出现索引错误

我正在尝试向正在加载的图像对象添加触摸事件侦听器。虽然这实际上是从文档中复制并粘贴的几乎完全一样: https://docs.coronalabs.com/api/type/EventDispatcher/addEventListener.html

但它返回以下错误:

36:尝试索引本地' object '(一个空值)

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

local function showImages ()
    local function networkListenerImg( event )
        if ( event.isError ) then
            print ("网络错误-下载失败")
        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 ("您触摸了该对象!")
            return true
        end
    end

    object:addEventListener( "touch", object )

end

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

点赞
用户6614127
用户6614127

虽然您没有提到哪一行是第36行(只有28行),但我仍然可以看到您的错误。问题在于object是永远都是nildisplay.loadRemoteImage()不返回任何值,请参见此处

您需要做的是让您的侦听器回调捕获object,该object必须在回调之前声明。然后,回调应将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 } )
            -- 填充将下载对象保存到“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
2017-05-23 20:02:31