WebThread:signal SIGABRT 和 libc++abi.dylib:terminating with uncaught

weixin_34148340發表於2018-04-02

今天遇到一個很頑固的bug,解決之前都覺得很難,但是搞定之後,才恍然大悟,原來如此簡單,

今天的問題是:日誌裡只顯示libc++abi.dylib: terminating with uncaught exception of type NSException這個,其他資訊一點都沒有,然後各種除錯,也就多了這麼一條WebThread : signal SIGABRT,我完全懵了,一點都不知道是什麼問題,

問題背景:app裡有一個活動頁面是h5的頁面,然後通過點選h5頁面裡的註冊和登入按鈕,讓頁面跳到原生的app的登陸和註冊頁面進行下面的操作,因為此前做過其他的類似的功能的都沒問題,很自然的覺得肯定也是沒問題的,結果就給我報了錯誤,錯誤停留在使用者名稱的那個textField那裡,我奇怪的很,從app原生頁面進入註冊和登入頁面沒一點問題,但是從h5頁面進入的話就會報錯,我就奇了怪了不清楚為什麼會這樣,並且錯誤提示就是上面那兩個,沒有任何的多餘資訊,

解決辦法:我各種百度看到好多人都是說 什麼 xib 連線不對  ,物件重複釋放等等這些解決方法,我就奇了怪了 我是純程式碼寫的完全沒有xib根本不會存在連線的問題,物件也沒有重複釋放,我完全搞不懂狀況,各種部落格都看過就是沒辦法,最後突然想到一個辦法 不知道行不行 只能試一試了,就自己寫了try catch方法搞,方法如下:

@try{  

      

          //這裡寫你的造成app閃退的程式碼

    }  

@catch

(NSException *exception) {  

        NSLog(@"exception:%@"

, exception);  

    }  

@finally {  

          

    }  

​​然後再次執行程式到了這裡依然會崩潰,點選跳過斷點(有時候可能要多點幾次),然後就會發現日誌欄裡出現了新的關鍵的日誌如下:

-[RegistViewController phoneField] [第139行] exception:Only run on the main thread!

一看就明白了,意思是要在主執行緒裡執行(這才是關鍵日誌),後來經過修改就可以搞定了,

最後我​想了想 原因應該是  UITextField 這種UI控制元件必須要在主執行緒裡重新整理的,而我從h5跳到原生頁面是開了子執行緒去跑的,所以有問題,改完之後就沒問題了,希望能幫到一些和我犯一樣錯誤的同學吧,畢竟 這種問題不容易搞,錯誤日誌資訊很少,沒有重要資訊,很麻煩,,,

相關文章