Board logo

标题: Reat Native调用OC本地方法, 代理方法不执行 [打印本页]

作者: look_w    时间: 2019-3-4 18:34     标题: 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交互的弱鸡,真的是好难为.特地记录一下,希望能帮到人.




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0