私は 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:)が呼び出されているのかわかりません。
サブクラスからすべてのイニシャライザを削除すると、正常に動作しますが、スーパーのみを呼び出すメソッド/イニシャライザをオーバーライドするのは面倒なので混乱します。
87 行目は、クラスが宣言されている行です。デバッガーでステップ インしようとしましたが、UIKit コードにステップ インできず、自分のコードだけにステップ インできません。
これが重要な場合、これは iOS 10 と Swift 3 にあります。