もう読んだ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.xib
MyModule
バンドルの名前(つまりプロジェクトの名前)はどこにありますか(これは Apple のアドバイスですが、私は嫌いです)@objc(TestViewController)
ビューコントローラの宣言の前に使用してclass
、メカニズムを壊す名前のマングリングを克服します(これが私が好むアプローチです)
私の議論はこちらをご覧ください:https://stackoverflow.com/a/25163757/341994そこからリンクされた私のさらなる議論:https://stackoverflow.com/a/25152545/341994
編集このバグは iOS 9 ベータ 4 で修正されました。nib ファイルの検索が失敗した場合、iOS 9 ではビュー コントローラーのクラス名からモジュール名が削除され、nib ファイルの検索が再度実行されます。