我很难获得我的 userInfo 参考。我的方法之一是返回对象的实例。每次调用 createUserInfo 时,都会将 userInfoObject 返回给 lua。
但是,当我从 Lua 调用 userInfo 对象的方法时,我无法获取 userInfo 对象的引用(lua_touserdata(L,1))
static int getUserName (lua_State *L){
UserInfo **userInfo = (UserInfo**)lua_touserdata(L,1);
// The following is throwing null! Need help.
// Not able to access the userInfo object.
NSLog(@"UserInfo Object: %@", *userInfo);
}
static const luaL_reg userInstance_methods[] = {
{"getUserName", getUserName},
{NULL, NULL}
}
int createUserInfo(lua_State *L){
UserInfo *userInfo = [[UserInfo alloc] init];
UserInfoData **userInfoData = (UserInfoData **)lua_newuserdata(L, sizeof(userInfo*));
*userInfoData = userInfo;
luaL_openlib(L, "userInstance", userInstance_methods, 0);
luaL_getmetatable(L, "userInfoMeta");
lua_setmetatable(L, -2);
return 1;
}
// I have binded newUserInfo to the createUserInfo method.
// I have also created the metatable for this userInfo Object in the init method.
// luaL_newmetatable(L, "userInfoMeta");
// lua_pushstring(L, "__index");
// lua_pushvalue(L, -2);
// lua_settable(L, -3);
// luaL_register(L, NULL, userInstance_methods);
如果我遗漏了什么,请告诉我!
我的 LuaCode 片段:
local library = require('plugin.user')
local userInfo = library.newUserInfo()
print(userInfo.getUserName())
更新 我摆脱了 null,在使用 lua_upvalueindex(1) 之后,这是对用户信息实例的引用。
UserInfo **userInfo = (UserInfo**)lua_touserdata(L,lua_upvalueindex( 1 ));
希望它也对其他人有所帮助!