2013-05-01 71 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仍然加載文件。 – 2013-05-01 18:50:39

+1

其實你是對的,它是Xcode/iOS包構建系統的結果。我正在編輯的文件不是正在加載的文件 - 它正在加載應用程序包中的文件。這很好,我現在有理由,仍然不知道如何解決它。 – 2013-05-01 23:10:52

+0

實際上很簡單,至少如果使用模擬器在Mac上運行。只需將luaFilePath變量直接更改爲機器上lua文件的任何位置即可。經過測試,它的工作原理。無論如何,這就是我所感興趣的,因爲在設備上我不會有任何運行時變化。太好了,非常感謝John。 – 2013-05-01 23:32:10