3 回答
TA贡献2003条经验 获得超2个赞
问题
这是由init?(coder aDecoder: NSCoder)目标上缺少初始化程序引起的UIViewController。该方法是必需的,因为UIViewController从UIStoryboard调用它实例化a 。
看看我们如何初始化一个UIViewController从UIStoryboard,请大家看看这里
为什么这不是Objective-C的问题?
因为Objective-C自动继承所有必需的UIViewController初始值设定项。
为什么Swift不会自动继承初始化器?
默认情况下,Swift由于安全性而不继承初始值设定项。但是如果所有属性都有值(或可选)并且子类没有定义任何指定的初始化器,它将继承超类中的所有初始化器。
解
1.第一种方法
手动实现init?(coder aDecoder: NSCoder)目标UIViewController
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
2.第二种方法
正如Dave Wood在下面的回答中指出的那样,删除init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)目标UIViewController将继承超类中所需的所有初始值设定项
TA贡献1820条经验 获得超9个赞
除了@ 3r1d之外的另一个选择是从您的类中删除以下init方法:
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Custom initialization
}
包括init方法,阻止子类继承init(coder aDecoder: NSCoder!)其超类。如果不包括它,你的班级将继承两者。
注:有关更多详细信息,请参阅WWDC 2014 Session 403“Intermediate Swift”,大约33:50。
TA贡献1871条经验 获得超8个赞
对于与swift存在相同问题的人UICollectionViewCells,请将@ 3r1d建议的代码添加到自定义UICollectionViewCell类而不是View Controller:
init(coder aDecoder: NSCoder!)
{
super.init(coder: aDecoder)
}
- 3 回答
- 0 关注
- 622 浏览
添加回答
举报