今天遇到一個(gè)很頑固的bug,解決之前都覺得很難,但是搞定之后,才恍然大悟,原來如此簡(jiǎn)單,
今天的問題是:日志里只顯示libc++abi.dylib: terminating with uncaught exception of type NSException這個(gè),其他信息一點(diǎn)都沒有,然后各種調(diào)試,也就多了這么一條WebThread : signal SIGABRT,我完全懵了,一點(diǎn)都不知道是什么問題,
問題背景:app里有一個(gè)活動(dòng)頁(yè)面是h5的頁(yè)面,然后通過點(diǎn)擊h5頁(yè)面里的注冊(cè)和登錄按鈕,讓頁(yè)面跳到原生的app的登陸和注冊(cè)頁(yè)面進(jìn)行下面的操作,因?yàn)榇饲白鲞^其他的類似的功能的都沒問題,很自然的覺得肯定也是沒問題的,結(jié)果就給我報(bào)了錯(cuò)誤,錯(cuò)誤停留在用戶名的那個(gè)textField那里,我奇怪的很,從app原生頁(yè)面進(jìn)入注冊(cè)和登錄頁(yè)面沒一點(diǎn)問題,但是從h5頁(yè)面進(jìn)入的話就會(huì)報(bào)錯(cuò),我就奇了怪了不清楚為什么會(huì)這樣,并且錯(cuò)誤提示就是上面那兩個(gè),沒有任何的多余信息,
解決辦法:我各種百度看到好多人都是說 什么 xib 連線不對(duì) ?,對(duì)象重復(fù)釋放等等這些解決方法,我就奇了怪了 我是純代碼寫的完全沒有xib根本不會(huì)存在連線的問題,對(duì)象也沒有重復(fù)釋放,我完全搞不懂狀況,各種博客都看過就是沒辦法,最后突然想到一個(gè)辦法 不知道行不行 只能試一試了,就自己寫了try?catch方法搞,方法如下:
?
@try{??
? ?? ?
? ? ? ? ? //這里寫你的造成app閃退的代碼
?
????} ?
?@catch
(NSException?*exception)?{??
????????NSLog(@"exception:%@"
,?exception);??
????} ?
?@finally?{ ?
??????????
????} ?
?
??然后再次運(yùn)行程序到了這里依然會(huì)崩潰,點(diǎn)擊跳過斷點(diǎn)(有時(shí)候可能要多點(diǎn)幾次),然后就會(huì)發(fā)現(xiàn)日志欄里出現(xiàn)了新的關(guān)鍵的日志如下:
-[RegistViewController phoneField] [第139行] exception:Only run on the main thread!
一看就明白了,意思是要在主線程里執(zhí)行(這才是關(guān)鍵日志),后來經(jīng)過修改就可以搞定了,
最后我?想了想 原因應(yīng)該是 ?UITextField 這種UI控件必須要在主線程里刷新的,而我從h5跳到原生頁(yè)面是開了子線程去跑的,所以有問題,改完之后就沒問題了,希望能幫到一些和我犯一樣錯(cuò)誤的同學(xué)吧,畢竟 這種問題不容易搞,錯(cuò)誤日志信息很少,沒有重要信息,很麻煩,,,