React Native js调用Native的小坑

刚学习RN不久,今天试着在已有的项目中使用。在js当中调用native类PersonCenter提供的方法logout。

js当中调用native方法

这个方法里的动作是navigationController的pop,而且已经放到了主线程当中执行。如下图所示。

React Native js调用Native的小坑_第1张图片
native当中的方法

但是在js当中点击之后,native的方法被调用到了,却没有返回上一页。

在项目中打了断点调试,发现了问题所在。在进入当前controller时,viewDidLoad当中打断点,self的内存地址0x00007fd18c531bb0

React Native js调用Native的小坑_第2张图片
在进入这个controller的viewDidLoad中打断点查看self地址


当点击js当中的返回时,调用native,此时的self地址发生了变化,说明和之前不一样,而且self的变量都变成了nil。由此可知,js调用Native时,应该是重新创建了一个当前实例用于方法调用。新生成的实例并不包含之前self当中的所有变量(其中当然也包括self.navigationController),因此在调用的时候self.navigationController实际为空,也就达不到返回上一层的效果。

React Native js调用Native的小坑_第3张图片
js调用时新生成了一个实例

暂时的解决方法是把navigationController定义成一个全局,这样在调用的时候不会出现为空的情况。还请大家斧正。

你可能感兴趣的:(React Native js调用Native的小坑)