如何修复字符串问题?

时间:2014-02-10 05:10:44

标签: lua corona

local background = display.newImage("black.png", 0, 0)

local submit = display.newImage("submit.png")
submit.x = display.contentWidth/2
submit.y = display.contentHeight-100

local nameInstructions = display.newText("Enter your name", 10, 50, native.systemFont, 24)
local usersName = native.newTextField(10, 100, 350, 50)
usersName.inputType = "default"

local function keyboardListener (event)
    native.setKeyboardFocus(nil)
end

background:addEventListener("tap", keyboardListener)

local function reverseName(event)
    reverseUsersName = string.reverse(usersName)
end

submit:addEventListener("tap", reverseName)

local reverse = display.newText(reverseUsersName)
reverse.x = display.contentWidth/2
reverse.y = display.contentHeight/2

每次使用我的Corona SDK操作时,我都会得到这个:

Bad argument #-1 to 'newText' (string expected, got nil)

stack traceback:
    [C]: ?
    [C]: in function 'newText'
    ...Corona Projects/Assignment 4.3/main.lua/src/main.lua:24: in main chunk

3 个答案:

答案 0 :(得分:0)

reverseName在本地函数reverseName(event)中,但是一旦按下或点击提交,就会调用此函数。但是,在点击sumbit之前,会调用local reverse = display.newText(reverseUsersName)。这就是为什么它给你错误。

答案 1 :(得分:0)

第24行访问reverseUsersName的唯一位置是 函数reverseName(event)。在此函数中,reverseUsersName是全局的,所以函数运行一次之后,该变量可以从脚本的其他部分访问,但在此之前,它不存在。

现在在第22行中,您已将reverseName注册为“tap”事件的事件侦听器,但事件仅在脚本执行一次后生成(并且在调用脚本回调之间,如reverseName和keyboardListener)是回调),所以当您刚刚创建显示文本时,该变量尚不存在。

因此,您需要更新reverse侦听器中reverseName显示项的文本,以便每次单击按钮时,反转的名称都会显示。因此,您必须在 reverse函数上声明reverseName变量,以便它可以作为upvalue(阅读Corona入门文档,它们非常出色)并在该功能中讨论这个微妙的问题。并且可能您希望初始化显示usersName而不是反向。

所以你需要像

这样的东西
local reverse = display.newText(usersName)

local function reverseName(event)
    reverseUsersName = string.reverse(usersName)
    reverse.SetText(reverseUserName)
end

submit:addEventListener("tap", reverseName)

请注意,如果您希望每次按水龙头时都显示显示字符串,而不是仅在您第一次按下时,则必须使用

local function reverseName(event)
    reverseUsersName = string.reverse(reverseUsersName)
    reverse.SetText(reverseUserName)
end

reverseUsersName = usersName

答案 2 :(得分:0)

使用以下代码检查您的函数reverseName和文本对象(reverse):

local reverse --[[ Initialize the object with a global scope,
                   so you can access it anywhere from the page. --]]
local function reverseName(event)
  --[[ In the below line, usersName is a table value. It is the reason 
         of the error. For getting the string from the text field, you 
         have to provide 'usersName.text' --]]
  reverseUsersName = string.reverse(usersName.text) 
  reverse.text = reverseUsersName -- Assign the text field value to your text object
end

submit:addEventListener("tap", reverseName)

reverse = display.newText("",20,20,nil,20) --see the parameters of display.newText()*
reverse.x = display.contentWidth/2
reverse.y = display.contentHeight/2

* Corona API:display.newText()