我lua调OC分享,在返回游戏的时候 OC回调LUA崩溃了,谁知道为啥,
CCLuaObjcBridge::pushLuaFunctionById(luaCallback);
CCLuaObjcBridge::getStack()->pushString(“1”);
CCLuaObjcBridge::getStack()->executeFunction(1);
CCLuaObjcBridge::releaseLuaFunctionById(luaCallback);
我加上这几句崩在另外1个地方,但是这几句下断点根本没走,我注释掉就不会崩,xcode也Clean了,电脑也重启了,依然这样,想不通啊
第一句里的luaCallback是怎么传进来的?
+(void)shareXinLangWeiBo:(NSDictionary *)dict
{
NSString *filePath = ;
int luaCallback = intValue];
sendSinaMessage:(NSString *)filePath callback:^(BOOL rs, __weak NSString * msg) {
if(rs == YES){
CCLuaObjcBridge::pushLuaFunctionById(luaCallback);
NSLog(@"小小姑娘");
CCLuaObjcBridge::getStack()->pushString("1");
CCLuaObjcBridge::getStack()->executeFunction(1);
CCLuaObjcBridge::releaseLuaFunctionById(luaCallback);
}else{
CCLuaObjcBridge::pushLuaFunctionById(luaCallback);
CCLuaObjcBridge::getStack()->pushString("0");
CCLuaObjcBridge::getStack()->executeFunction(1);
CCLuaObjcBridge::releaseLuaFunctionById(luaCallback);
}
}];
}
lua 传过来的,这是lua调过来的方法
我解决了,原来OC里方法内部的方法不能使用外部方法的局部变量,java和我大lua都可以,坑死我了,我把luaCallback改成全局的就好使了,而且我在其他地方掉这个方法的时候,是崩在调这个方法的地方,不是崩在空的地方,
先查一下CCLuaObjcBridge::pushLuaFunctionById的返回值,不为0才是正确的。
如果上面的是对的,在你的lua回调函数的开头加一句调试信息,看被回调了没有。
sendSinaMessage:(NSString *)filePath callback
我猜测这行代码是在一个单独的线程里做的回调。而 Lua 和 Cocos2dx 是运行在主线程里的。
所以跨线程调用 Lua,而 Lua 又操作 Cocos2dx,导致了 crash。
你可以在 Callback 里切换到主线程再调用 Lua,具体做法 google 一下吧。
嗯,线程问题我也怀疑到了,本来想先排除一下其他的因素的。但廖大这方面的经验更丰富,他指出这个可能性很大的话,应该是八九不离十了。