刚学习RN不久,今天试着在已有的项目中使用。在js当中调用native类PersonCenter提供的方法logout。
这个方法里的动作是navigationController的pop,而且已经放到了主线程当中执行。如下图所示。
但是在js当中点击之后,native的方法被调用到了,却没有返回上一页。
在项目中打了断点调试,发现了问题所在。在进入当前controller时,viewDidLoad当中打断点,self的内存地址0x00007fd18c531bb0
当点击js当中的返回时,调用native,此时的self地址发生了变化,说明和之前不一样,而且self的变量都变成了nil。由此可知,js调用Native时,应该是重新创建了一个当前实例用于方法调用。新生成的实例并不包含之前self当中的所有变量(其中当然也包括self.navigationController),因此在调用的时候self.navigationController实际为空,也就达不到返回上一层的效果。
暂时的解决方法是把navigationController定义成一个全局,这样在调用的时候不会出现为空的情况。还请大家斧正。