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

今天遇到一个很顽固的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跳到原生页面是开了子线程去跑的,所以有问题,改完之后就没问题了,希望能帮到一些和我犯一样错误的同学吧,毕竟 这种问题不容易搞,错误日志信息很少,没有重要信息,很麻烦,,,

你可能感兴趣的:(WebThread:signal SIGABRT 和 libc++abi.dylib:terminating with uncaught)