0

私はUINavigationControllerのサブクラスを持っている:Swiftが間違ったイニシャライザを呼び出すのはなぜですか?

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' 

なぜ私は理解していませんinit(nibName:bundle :)が呼び出されているとき、キーワードを指定したときnavigationBarClaツールボックス:

私のサブクラスからすべての初期化子を削除するとうまくいきます。superを呼び出すメソッド/初期化子を無効にする必要があるので、混乱してしまいます。

ライン87は、クラスが宣言されているラインです。私はデバッガでステップアップしようとしましたが、UIKitコードにステップインすることはできません。私のコードだけです。この問題場合

、これはあなたが機能を印刷する場合、すべてのinit Sをオーバーライドするとき、コンソールはこのようになりますので、問題は、UINavigationControllerのライフサイクルから茎のiOS 10とスウィフトに3

答えて

1

です:

class NavController: UINavigationController { 

    /* Properties */ 

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } 

    override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) { 
     super.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

extension NavController { 
    /* Methods */ 
} 
+0

イム:

init(nibName:bundle:) init(navigationBarClass:toolbarClass:) 

だから、また、それが最初に呼び出されるように、このように、init(nibName:bundle:)をオーバーライドする必要が現在のプロジェクトにそのコードを配置してもうまく動作し、問題なく動作します。 'navController = NavController(navigationBarClass:nil、toolbarClass:nil)' –

+0

これはうまくいきますが、これは謎です。何もない。 –

+0

その素早く迅速で、私たちを悩ますのが大好きです –

関連する問題