大家好,实在顶不住了。来发帖,
开发工具:cocos2d-x 3.17
语言:LUA
最近在接IOS微信登录SDK,我这边的流程:
1.LUA调用OC,OC收到微信相关数据回调到LUA,主要通过LuaBridage的形式。
LUA我写了2个接口,代码如下:
一、微信SDK初始化(APP启动触发)
二、微信登录(用户点微信登录按钮触发)
OC这边代码结构:
一、APPController.mm
引用了一个SDK单例和微信管理器单例初始化微信的实例;其中PluginHelp是管理所有的SDK, PluginWetChatManager是管理微信SDK
二、 在cocos2d-x/cocos/platform 加入了通用的Plugin.mm(让所有的SDK插件继承他),加入PluginHelp.mm(管理加载所有的插件,并且接受appcontrol的事件)。
plugin.h
plugin.mm
pluginHelper.h
pluginHelper.mm
三、微信SDK部分:
一、架构:

pluginWeChat继承plugin类,内部为动态oc方法。
pluginWechatManager,内部为静态方法单例,提供接口给lua那边调用,lua调用oc后,内部再调用pluginWeChat的方法实例相关接口。
二、贴下代码:
pluginwechat.h
pluginwechat.mm
pluginwechatmanager.h
pluginwechatmanager.mm
四、问题:
我在游戏的appcontrol.mm里通过微信单例调用initWeChatPlugin,实例化了PluginWeChat,LUA调用PluginWechatManager的initPlugin方法,该方法通过刚创建的实例调用内部的initPlugin(为动态方法),并且传递了相关从lua发过来的参数。
第一次调用成功,self.appid ,appsecret成功被赋值,打印是有的。
并且微信初始化成功,告诉了lua那边:
第二次用户点击登录login,lua调用oc login方法
报错截图:不调试会闪退。
这个时候就报错了。self.appid有,但是appsecret,是空的。为啥呢,不都在第一次的时候login初始化在内存了吗?
我朋友说lua调用oc每次都是新的类,但是我看了这个实例化的pluginwechat内存地址,2次都是一样的。
第二个疑点,我尝试在login的时候也丢了参数过来,
这个时候可以拿到的,但是当从微信respon回来的时候,他们居然又不见了。
到打印这里,再次空了。
挖槽!无情!




















