SwiftのストーリーボードでUIViewController XIBファイルをロードできない 質問する

SwiftのストーリーボードでUIViewController XIBファイルをロードできない 質問する

もう読んだXCode ストーリーボードを使用して、XIB をデザインに使用するビュー コントローラをインスタンス化するしかし、Swift (Xcode 6 Beta 6 を使用) でこれを動作させるのに問題があります。何か間違ったことをしたのか、それともこの機能はもう利用できないのか疑問に思っています。

シンプルなリポジトリを作成しました。https://github.com/jer-k/StoryboardTesting-Swift、これは上記のアプローチを紹介しています。

initにオーバーライドを追加することで問題を解決できました

required init(coder aDecoder: NSCoder) {
    super.init(nibName: "TestViewController", bundle: NSBundle.mainBundle())
}

しかし、ストーリーボードでこれを処理することはまだ可能かどうか疑問に思っています。上記のコードを使用して、すべての UIViewController が継承するスーパークラスを作成することは、世界で最も面倒なことではありませんが、現時点では興味があります。

ベストアンサー1

何が起こったかというと、ビュー コントローラが Swift クラスである場合に、ビュー コントローラが名前で xib を見つけることができるメカニズムが Seed 5 によって破壊されたのです。その理由は、Swift の認識では、クラスの名前が、クラスに付けた名前 (および xib ファイルに付けた名前) と同じではないためです。特に、モジュール名を先頭に付けることによって、名前が「マングル化」されています (つまり、Swift クラスには名前空間があります)。

3 つの回避策を提案します。

  • あなたの回避策は良いものです(.xibファイルを明示的に名前でロードします)

  • .xibファイルに名前を付けるMyModule.TestViewController.xibMyModuleバンドルの名前(つまりプロジェクトの名前)はどこにありますか(これは Apple のアドバイスですが、私は嫌いです)

  • @objc(TestViewController)ビューコントローラの宣言の前に使用してclass、メカニズムを壊す名前のマングリングを克服します(これが私が好むアプローチです)

私の議論はこちらをご覧ください:https://stackoverflow.com/a/25163757/341994そこからリンクされた私のさらなる議論:https://stackoverflow.com/a/25152545/341994

編集このバグは iOS 9 ベータ 4 で修正されました。nib ファイルの検索が失敗した場合、iOS 9 ではビュー コントローラーのクラス名からモジュール名が削除され、nib ファイルの検索が再度実行されます。

おすすめ記事