Ошибка совместимости строк, попытка индексировать нулевое значение

Я использую Gideros и получаю эту ошибку:

    main.lua:47: attempt to index a nil value
stack traceback:
    main.lua:47: in function 'func'
    [string "compatibility.lua"]:36: in function <[string "compatibility.lua"]:35>

У меня есть этот кусок кода, и как только текст отображается, он дает мне вышеупомянутую ошибку: Как я могу это исправить?

function onEnter()
    function youLoose()
    local font2 = TTFont.new("billo.ttf", 20, "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    LooserText = TextField.new(font2, "You Loose   , Try AGAIN?")
    LooserText:setPosition(100, 100)
    stage:addChild(LooserText)
    Timer = Timer.delayedCall(1000, removing)
    end --line 36
   end   
    function removing()
    LooserText:getParent():removeChild(LooserText)  --line 47
    end

2 ответа

index nil ошибка означает, что на этой линии вы, вероятно, получаете nil как возвращаемое значение из LooserText:getParent(),

Почему вы будете получать nil за это я не могу сказать вам ничего, кроме предположительно, потому что у него его нет.

Документация указывает на то, что нет условия ошибки для Stage.addChild за исключением того, что добавляемый объект должен быть Sprite. TextField наследует Sprite, поэтому у вас нет видимой причины для получения этой ошибки. Тем не менее, вы не должны переназначать возвращаемое значение delayedCall к глобальной переменной с тем же именем, что и Timer класс, это может повлиять на другие части приложения. Так как вы не используете возвращенный Timer Например, я удалил назначение. Кроме того, если stage:addChild удалось тогда removing можешь использовать stage, Одна странная вещь в том, что ваш onEnter просто определяет youLose() но не вызывает и не возвращает его, эта часть кода вы пропустили? В любом случае вам нужно добавить некоторые проверки работоспособности, чтобы убедиться, что то, что, по вашему мнению, происходит, действительно происходит без добавления / удаления дочерних элементов:

function onEnter()
    function youLoose()
        local font2 = TTFont.new("billo.ttf", 20,   "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
        LoserText = TextField.new(font2, "You Lose   , Try AGAIN?")
        LoserText:setPosition(100, 100)
        print('Stage num children:' .. stage:getNumChildren())
        stage:addChild(LoserText)
        print('Stage num children:' .. stage:getNumChildren())
        print('LoserText is stage child #' .. stage:getChildIndex(LoserText))
        Timer.delayedCall(1000, removing)
     end 
end

function removing()
    print('Stage num children:' .. stage:getNumChildren())
    print('LoserText is stage child #' .. stage:getChildIndex(LoserText))
    stage:removeChild(LoserText)
    print('Stage num children:' .. stage:getNumChildren())
end
Другие вопросы по тегам