起因
今天测试提了一个bug, 大致内容如下:
设备: iPhone5s 、系统:iOS8.3
问题: 点击cell进入某个子页面,直接闪退
经过
看到这个bug第一反应: 我不会搞出这么明显的错误吧!
通过与测试沟通才知道是在特定的设备和系统下才发生的(iPhone5s、iOS8.3),这就尴尬了,第一反应是我调用了iOS8之后的api才会造成crash。
借来“问题设备”,加一个全局断点希望定位到问题行,奈何我怎么挣扎crash始终停在main函数。无奈,在视图的生命周期方法中依次加断点,结果发现,他丫的还未进入viewdidLoad的断点就已经crash了。
再次寻寻觅觅,当我给vc添加loadView方法后并打上断点,发现点击cell是会停到loadView中的断点。
结果
反复思考,我想到是不是vc没有找到相应的xib导致系统loadView方法执行之后不会进入viewdidLoad。然后我检查xib,如图:
因此我猜想:在iOS8下,当xib中有多个view文件是,不能识别到哪一个是系统loadview时需要的view。
当我将init方法换成initWithNibName,果然不再crash了
2333。。。问题得以解决,看来iOS9后苹果对viewController的init方法进行过一些优化,才能在xib中有多个view时还能找到这个xib