Iphone 将Objective-C对象绑定到现有的Lua变量
我必须将Objective-C对象绑定到Lua脚本的变量。我没有这个Lua脚本的写权限,我只是从Objective-C代码加载并运行它。我知道它使用一个名为Iphone 将Objective-C对象绑定到现有的Lua变量,iphone,objective-c,lua,Iphone,Objective C,Lua,我必须将Objective-C对象绑定到Lua脚本的变量。我没有这个Lua脚本的写权限,我只是从Objective-C代码加载并运行它。我知道它使用一个名为luaVar的变量,该变量使用对象中定义的方法。以下是Lua代码: function run() print("Running Lua script") print(luaVar) print("Ending Lua script") end run() 此脚本应打印luaVar变量,而不是nil。现在,这里是我使
luaVar
的变量,该变量使用对象中定义的方法。以下是Lua代码:
function run()
print("Running Lua script")
print(luaVar)
print("Ending Lua script")
end
run()
此脚本应打印luaVar
变量,而不是nil
。现在,这里是我使用的Objective-C代码。函数validate
获取script
变量中的Lua代码以及要作为f
传递给Lua的对象,该对象位于object
变量中:
#import "ScriptObject.h"
static const char* SCRIPT_OBJECT_LUA_KEY = "f";
ScriptObject* scriptObject = nil;
- (void)validate:(NSString*)script withObject:(ScriptObject*)theObject {
L = luaL_newstate(); // create a new state structure for the interpreter
luaL_openlibs(L); // load all the standard libraries into the interpreter
lua_settop(L, 0);
newScriptObject(L);
// load the script
int err = luaL_loadstring(L, [script cStringUsingEncoding:NSASCIIStringEncoding]);
if (LUA_OK != err) {
NSLog(@"Error while loading Lua script!");
lua_pop(L, 1);
return NO;
}
// call the script
err = lua_pcall(L, 0, LUA_MULTRET, 0);
if (LUA_OK != err) {
NSLog(@"Error while running Lua script: %s", lua_tostring(L, -1));
lua_pop(L, 1);
return NO;
}
lua_close(L);
}
static int newScriptObject(lua_State *L) {
ScriptObject * __strong *lgo = (ScriptObject * __strong *)lua_newuserdata(L, sizeof(ScriptObject *));
*lgo = scriptObject;
luaL_getmetatable(L, SCRIPT_OBJECT_LUA_KEY);
lua_setmetatable(L, -2);
lua_newtable(L);
lua_setuservalue(L, -2);
NSLog(@"New ScriptObject created");
return 1;
}
我尝试了来自的方法,但这不能处理Objective-C对象。我看了,但不清楚它是如何装订的
有人知道怎么做吗?我自己找到的。这只是将定义的变量设置为Lua全局变量的
newScriptObject
函数末尾缺少的一行:
lua_setglobal(L, SCRIPT_OBJECT_LUA_KEY);
您想对该对象做什么?“它使用对象中定义的方法”是什么意思?@H2CO3我想调用它的一些方法。例如,如果Objective-C对象有一个
(NSString*)getString()
方法,则Lua代码可能会调用luaVar:getString()
并获得结果。您必须澄清。显示您希望能够编写的Lua代码。你看过吗?您可能可以通过查看Wax如何桥接Lua和Objective-C找到解决方案(不再维护Wax,但这无关紧要,技术应该仍然适用)。@Schollii添加了我要编写的Lua代码,只是一个使用非nilluaVar
变量的简单函数。我已经看过你的建议,但是Lua-Objective-C-Bridge
不是面向iOS的,而且Wax
非常难以移植到现代iOS项目中。事实上,我需要更简单的解决方案,而不是像这样的完整解决方案。我找到了答案,再次感谢!