2013-05-01 3 views
1

Я делаю ниже в приложении C++/Objective-C для загрузки сценария lua. Прекрасно работает, lua_getglobal успешно получает значение «testnum». Однако значение никогда не изменяется при обновлении скрипта во время запуска приложения и в следующий раз, когда я пройду через эту часть пути кода.Как изменить сценарии Lua во время выполнения сценария запуска/перезагрузки?

L = luaL_newstate(); 
    luaL_openlibs(L); 

    lua_settop(L, 0); 

    int err; 

    NSString * luaFilePath = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"lua"]; 
    err = luaL_loadfile(L, [luaFilePath cStringUsingEncoding:[NSString defaultCStringEncoding]]); 


    err = lua_pcall(L, 0, 0, 0); 
    if (0 != err) { 
     luaL_error(L, "error: %s", 
        lua_tostring(L, -1)); 
     return; 
    } 

    lua_getglobal(L, "testnum"); 

    int num = lua_tointeger(L, -1); 

Lua файл (Test.lua) просто

testnum = 100 

Я меняю значение testnum, но она всегда остается 100 (или то, что было установлено на на запуск) в приложение C++/Objective-C. Я даже могу полностью удалить testnum var, и все равно 100, а lua_getglobal не жалуется (кроме случаев, когда я это делаю при запуске), значение num будет таким, каким оно было при запуске основного приложения. Что необходимо для перезагрузки сценария и получения любого последнего номера во время работы приложения.

ответ

2

Вы делаете это примерно правильно, но я не думаю, что проблема Lua здесь, проблема в том, что файлы в комплекте не изменятся, пока вы не перестроете приложение.

Если вы просто загрузили файл, а не использовали пакет, то то, что у вас было, будет работать.

+0

Я получаю только путь к файлу с помощью NSBundle, то есть для заполнения luaFilePath. Это не должно меняться. Файл luaL_loadfile все еще загружает файл. –

+1

На самом деле вы правы, это приводит к созданию системы сборки пакетов Xcode/iOS. Файл, который я редактирую, не тот, который загружается - он загружает тот из пакета приложений. Хорошо, что у меня есть причина сейчас, но не знаю, как это исправить. –

+0

На самом деле достаточно просто, по крайней мере, при работе на Mac с помощью симулятора. Просто измените переменную luaFilePath прямо там, где lua-файл находится на машине. Протестировано и работает. Это все, что меня интересует, так как на устройстве у меня не будет никаких изменений во время работы. Отлично, большое спасибо Джону. –

Смежные вопросы