swift 在iOS8.0中使用xib奔溃问题

问题场景

之前在oc语法的运用中,会使用xib来描述ViewController。因为在oc中,ViewController初始化时会同步加载相同名字的xib,所以一直没有遇到问题。
而在Swift中,当我们使用同样的方法时,在iOS9以上的系统中运行,也没有遇到问题,但是通过已发版本的Bugly中,忽然发现多了很多闪退情况,看了崩溃日志发现闪退现象都发生在iOS8中。

分析

根据Bugly提示的奔溃信息去查看代码,没有发现明显的逻辑性问题,于是下了8.1的模拟器,在模拟器中运行代码,发现在代码调用tablew时,程序奔溃了,查看tablew发现为空值。查看资料后发现在Swift中,iOS9以后ViewController的init方法中会自动找到xib并加载,而在iOS8时,init方法时不会加载xib,而需要我们去手动加载(应该是Swift的Bug)。

解决方案

  • 方法一:使用纯代码布局( 简单粗暴)
  • 方法二:重新init()方法
// 兼容iOS8 默认加载xib
init() {
   super.init(nibName: "XXXXXXXXViewController", bundle: nil)
}
// 自动添加
required init?(coder aDecoder: NSCoder) {
   fatalError("init(coder:) has not been implemented")
}

你可能感兴趣的:(swift 在iOS8.0中使用xib奔溃问题)