iOS8.4系统下关于点击UITextField闪退问题

 事情起因     

项目上线有一段时间了,公司本着两周迭代一次的原则,优化用户及运营同事反馈的问题。我是独立负责整个iOS端应用,所以整个项目的策划、完成都是我全权负责,目前应用已步入正规,也达到了盈利的效果。然而有一天一个在前方战斗的BD同事说有一个医生出现闪退现象,我问他是在那个界面怎么操作发生的,他说就是在开方时操作多了会出现闪退,然而别的用户却不会有这样的情况。

事情分析

由于提供的线索有限,所以只能靠自己呢,这个时候我的猜测是可能与系统版本有关,同样的操作在别的手机上没问题,那只能说是手机自身的问题,我让同事给我截个屏看哈系统版本,这一看大致问题弄清楚了,该医生的系统是8.4,一个比较老的系统,

事情解决

于是马上着手解决这个棘手的问题
1:第一步先下载一个8.4系统的模拟器

2:然后运行程操作,在开方界面操作确实出现闪退,然后规律为每次都是点击第三次UITextField控件就崩溃,好了现在锁定问题,那接下来就找到问题并解决,打开debug模式下的错误日志



3:继续点击会产生崩溃信息的地方,当发生崩溃时会有错误日志出现,如图


经过一番研究个人觉得这是8.4系统的Bug,在第三次点击的时候发生了内存泄漏,而在别的系统下没毛病,代码没有一点毛病,那唯一解释就是指针还在,对象跑了(所谓的僵尸对象),所以在调用这个控件上找不到这个对象了,为什么这么说了,因为我还有如图可以证明,也是崩溃,但是错误信息变了,对象变为NSCfString,甚至有时候还变为NSData


4:解决办法:把项目中UITextField分类的dealloc方法注释就行了,

5:运行继续一顿乱点,发现没毛病了,问题在这就解决了,下一秒发生什么谁也不知道,咔嚓闪退了,一脸懵逼中.....,任重而道远啊。于是重现之前的操作,发现在点击某个XIB文件时,发生了崩溃,,卧槽啊,又是一个8.4的坑,,,代码很简单就是一个列表展示,,还有输入框(UITextField控件),然而还是点击UITextField时崩溃,这就奇怪了,最后在论坛看到说8.4系统用xib构建应用时不要关联delegate,而应该在awakeFromNib方法中调用delegate属性。最后按照这个方法完美解决问题。