【问题标题】:Error: Attempt to index global 'fifteenButton' (a nil value)错误:尝试索引全局“fifteenButton”(零值)
【发布时间】:2014-03-18 20:54:18
【问题描述】:
Error Line: 92

Attempt to index global 'fifteenButton' (a nil value)

stack traceback:
[C]: ?
/Users/ejaytumacder/dev/HappyShaker/time_select.lua:92: in function </Users/ejaytumacder/dev/HappyShaker/time_select.lua:90>
?: in function 'dispatchEvent'
?: in function '?'
?: in function 'gotoScene'
/Users/ejaytumacder/dev/HappyShaker/time_select.lua:12: in function '_onRelease'
?: in function '?'
?: in function <?:406>
?: in function <?:218>

这是我上面得到的错误,下面是它产生的代码。

local storyboard = require("storyboard")
local widget = require("widget")

local scene = storyboard.newScene()

local mydata = require("mydata")

local function fifteenSecondButtonEvent( event )
    local phase = event.phase
    if "ended" == phase then
        mydata.time = 15
        storyboard.gotoScene("play")
    end
end

local function thirtySecondButtonEvent( event )
    local phase = event.phase
    if "ended" == phase then
        mydata.time = 30
        storyboard.gotoScene("play")
    end
end

local function sixtySecondButtonEvent( event )
    local phase = event.phase
    if "ended" == phase then
        mydata.time = 60
        storyboard.gotoScene("play")
    end
end



function scene:createScene( event )
    local group = self.view
    local timeText = display.newText("TIME", 160, 70, "Helvetica", 30)
    group:insert( timeText )

    local fifteenButton = widget.newButton {
        time = 15,
        left = 75,
        top = 150,
        width = 164,
        height = 42,
        defaultFile = "fifteen_button.png",
        overFile = "fifteen_button_pressed.png",
        label = "",
        onRelease = fifteenSecondButtonEvent
    }
    --group:insert(fifteenButton)

    local thirtyButton = widget.newButton {
        time = 30,
        left = 75,
        top = 250,
        width = 164,
        height = 42,
        defaultFile = "thirty_button.png",
        overFile = "thirty_button_pressed.png",
        label = "",
        onRelease = thirtySecondButtonEvent
    }
    --group:insert(thirtyButton)

    local sixtyButton = widget.newButton {
        time = 60,
        left = 75,
        top = 350,
        width = 164,
        height = 42,
        defaultFile = "sixty_button.png",
        overFile = "sixty_button_pressed.png",
        label = "",
        onRelease = sixtySecondButtonEvent
    }
    group:insert(fifteenButton)
    group:insert(thirtyButton)
    group:insert(sixtyButton)
    print( "Number of children in Display Group: " .. group.numChildren )
end

function scene:willEnterScene( event )
    local group = self.view
end

function scene:enterScene( event )
    local group = self.view
end

function scene:exitScene( event )
    local group = self.view
    fifteenButton:removeEventListener( 'onRelease', fifteenSecondButtonEvent ) -- line 92
    thirtyButton:removeEventListener( 'onRelease', thirtySecondButtonEvent )
    sixtyButton:removeEventListener( 'onRelease', sixtySecondButtonEvent )

    timeText:removeSelf()
    timeText = nil
    if fifteenButton then
        fifteenButton:removeSelf()
        fifteenButton = nil
    end

    if thirtyButton then
        thirtyButton:removeSelf()
        thirtyButton = nil
    end

    if sixtyButton then
        sixtyButton:removeSelf()
        sixtyButton = nil
    end

    display.remove(group)
    storyboard.removeScene( "time_select" )

end

function scene:destroyScene( event )
    local group = self.view
end

scene:addEventListener("createScene", scene)
scene:addEventListener("willEnterScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("destroyScene", scene)

return scene

【问题讨论】:

    标签: button lua coronasdk corona-storyboard


    【解决方案1】:

    所以你的问题有两个问题。我将说明您收到该错误的原因。

    您在第 92 行遇到了该错误,因为您在 createScene 函数中定义了 fifteenButton。作为本地对象。所以不能在 createScene 函数之外引用。要解决该问题,您应该将local fifteenButton, thirtyButton, sixtyButton 添加到文件顶部。然后从createScene 中的相同命名变量之前删除local。这将解决您的错误。

    【讨论】:

    • 谢谢芬克。错误消失了,但是当我进入场景时,所有显示对象都拒绝显示自己。他们不见了。是小部件的问题吗?
    • @EjayTumacder 这是一个单独的问题。您应该编辑您的问题以关注错误,接受此答案,然后发布一个关于对象问题的新问题,并使用更新的代码。
    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 2018-11-11
    • 2015-04-09
    • 2014-01-26
    • 2013-06-07
    • 2020-03-08
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多