0

私は 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 にあります。

4

1 に答える 1