#lua #coronasdk #saving-data
#lua #coronasdk #сохранение-данные
Вопрос:
мой вопрос заключается в том, как сохранить пользовательский текстовый ввод в текстовый файл в corona sdk.
Итак, в основном я хочу добиться того, чтобы, когда пользователь что-то записывает в текстовое поле, а затем нажимает кнопку сохранить, текст из textxbox сохраняется в TXT-файл в каталоге системных документов.
спасибо за помощь! 🙂
вот код 🙂
local function inputListener( event )
if event.phase == "began" then
-- user begins editing textBox
print( event.text )
elseif event.phase == "ended" then
local myfile = io.open( filePath, "w" )
myfile:write(textBox)
io.close(myfile)
elseif event.phase == "editing" then
print( event.newCharacters )
print( event.oldText )
print( event.startPosition )
print( event.text )
end
end
local textBox = native.newTextBox( 200, 200, 280, 140 )
textBox.text = "This is line 1.nAnd this is line2"
textBox.isEditable = true
textBox:addEventListener( "userInput", inputListener )
Комментарии:
1. Я попробовал «myfile: write (TextBox.text)», и теперь я получил сообщение об ошибке: попытка индексировать глобальное «текстовое поле» (нулевое значение)
2. Возможно, вам нужно добавить «TextBox.text = event.text» чуть ниже строки «elseif event.phase == «завершено» затем».
3. все та же ошибка :/
4. Попробуйте переместить переменные над функцией. Если это не сработает, я предлагаю просто использовать текст, который вы извлекаете из переменной event.text, и сохранить его непосредственно в файл.
5. у меня все та же ошибка
Ответ №1:
Я предлагаю вам ознакомиться с документацией, предоставленной Corona Labs здесь: http://docs.coronalabs.com/guide/data/readWriteFiles/index.html
Вот объединенный код из документации и предоставленный вами код. С помощью этого кода я не могу воспроизвести ошибку, о которой вы упоминаете в комментариях, и поэтому я не могу помочь вам в дальнейшем.
local textBox = native.newTextBox( 200, 200, 280, 140 )
textBox.text = "This is line 1.nAnd this is line2"
textBox.isEditable = true
local function inputListener( event )
if event.phase == "began" then
-- user begins editing textBox
print( event.text )
elseif event.phase == "ended" then
local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory )
local file = io.open( path, "w" )
file:write( textBox.text )
io.close( file )
file = nil
elseif event.phase == "editing" then
print( event.newCharacters )
print( event.oldText )
print( event.startPosition )
print( event.text )
end
end
textBox:addEventListener( "userInput", inputListener )
Комментарии:
1. да, сохранить часть жестко закодированной строки довольно просто, у меня возникают проблемы, когда у меня есть динамическая строка, которую можно редактировать в любое время во время работы приложения. Я хочу сохранить затем измененный текст. 🙂 каждый раз, когда я пытаюсь это сделать, я получаю эту ошибку: неверный аргумент # 1 для ‘write’ (ожидаемая строка, получено nil)
2. Не могли бы вы отредактировать свой первоначальный ответ с помощью некоторого кода; код, который вы используете для сохранения в файл, и код, который вы используете для обновления переменной с помощью «динамической строки», пожалуйста? Учитывая ошибку, которую вы там опубликовали, может показаться, что переменной, в которой вы храните данные, неправильно присвоена ассоциация с вводимой строкой. Убедитесь, что вы инициализируете переменную SaveData перед процессом функции / сохранения И что данные действительно хранятся в строке.
3. Похоже, вы пытаетесь сохранить текстовое поле, а не текст внутри поля. Поскольку текстовое поле является объектом, вам нужно будет написать «myfile:write (TextBox.text)», чтобы получить фактическую строку, содержащуюся в указанном текстовом поле.
4. Я попробовал «myfile: write (TextBox.text)», и теперь я получил сообщение об ошибке: попытка индексировать глобальное «текстовое поле» (нулевое значение)
5. Возможно, вам нужно добавить «TextBox.text = event.text» чуть ниже строки «elseif event.phase == «завершено» затем».