剛學(xué)習(xí)RN不久,今天試著在已有的項(xiàng)目中使用。在js當(dāng)中調(diào)用native類PersonCenter提供的方法logout。
這個(gè)方法里的動(dòng)作是navigationController的pop,而且已經(jīng)放到了主線程當(dāng)中執(zhí)行。如下圖所示。
但是在js當(dāng)中點(diǎn)擊之后,native的方法被調(diào)用到了,卻沒(méi)有返回上一頁(yè)。
在項(xiàng)目中打了斷點(diǎn)調(diào)試,發(fā)現(xiàn)了問(wèn)題所在。在進(jìn)入當(dāng)前controller時(shí),viewDidLoad當(dāng)中打斷點(diǎn),self的內(nèi)存地址0x00007fd18c531bb0
當(dāng)點(diǎn)擊js當(dāng)中的返回時(shí),調(diào)用native,此時(shí)的self地址發(fā)生了變化,說(shuō)明和之前不一樣,而且self的變量都變成了nil。由此可知,js調(diào)用Native時(shí),應(yīng)該是重新創(chuàng)建了一個(gè)當(dāng)前實(shí)例用于方法調(diào)用。新生成的實(shí)例并不包含之前self當(dāng)中的所有變量(其中當(dāng)然也包括self.navigationController),因此在調(diào)用的時(shí)候self.navigationController實(shí)際為空,也就達(dá)不到返回上一層的效果。
暫時(shí)的解決方法是把navigationController定義成一個(gè)全局,這樣在調(diào)用的時(shí)候不會(huì)出現(xiàn)為空的情況。還請(qǐng)大家斧正。