首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Reat Native调用OC本地方法, 代理方法不执行

Reat Native调用OC本地方法, 代理方法不执行

context

今天接到一个给公司RN小伙伴集成VPN SDK的任务.原生代码三下五除二的就写完了.


在下面的代码中,由于初始化校验是异步操作,所以加了回调block.

    if (VPN_STATUS_OK == [self.helper vpnQueryStatus]) {
          NSLog(@"vpn当前是已经登录状态,注销后才能再登录");
          return;
        }
        SdkMode mode = EasyApp;
        [self.helper init:mode host:ipAddress port:[port integerValue] delegate:self];
        self.initCallBack = callback;


然后为了测试,我在RN代码中进行调用:

             VPNManager.initWithIPAddress('114.255.251.193','443',(status,description)=>{
               AlertIOS.alert(status,description);
                if (status=='RESULT_VPN_INIT_SUCCESS'){
                    VPNManager.startAuthWithUserName('your name','your password',(stausD,descriptionD)=>{
                      AlertIOS.alert(stausD,descriptionD);
                   })
                }
             });
             return;

顺理成章没有难度.

然后发生的事情让我沉默了. 原生代码中helper对象的代理方法死活不走_.
容易被忽略的线程

原生代码里面加上断点, 左边一扫,发现thread赫然是34.难道这就是元凶?
于是改写代码:

      dispatch_async(dispatch_get_main_queue(), ^{
        if (VPN_STATUS_OK == [self.helper vpnQueryStatus]) {
          NSLog(@"vpn当前是已经登录状态,注销后才能再登录");
          return;
        }
        SdkMode mode = EasyApp;
        [self.helper init:mode host:ipAddress port:[port integerValue] delegate:self];
        self.initCallBack = callback;
      });

重新运行.
终于实现了自己的想法.
可能经常做RN的小伙伴觉得这不是什么.可是我这扔下快一年的,而且当时也没做RN OC交互的弱鸡,真的是好难为.特地记录一下,希望能帮到人.
返回列表