我有一个 UINavigationController 子类:
fileprivate class NavController: UINavigationController {
override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) {
super.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass)
...
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
...
}
我将这个类实例化为:
navController = NavController(navigationBarClass: nil, toolbarClass: nil)
这可以编译,但在运行时失败:
AppDelegate.swift: 87: 19: fatal error: use of unimplemented initializer 'init(nibName:bundle:)' for class 'NavController'
当我指定关键字navigationBarClass:和toolbarClass:时,我不明白为什么会调用init(nibName:bundle:)。
如果我从我的子类中删除所有初始化程序,它可以正常工作,这令人困惑,因为覆盖只调用 super 的方法/初始化程序应该是一个 noop。
第 87 行是声明类的地方。我尝试使用调试器介入,但我无法介入 UIKit 代码,只能介入我的代码。
万一这很重要,这是在 iOS 10 和 Swift 3 上。