2018年3月26日月曜日

だから嫌いなんだ

Swiftで開発中に以下のようなエラーに見舞われました。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the XXX nib but the view outlet was not set.'
  • Xcode 8.3.3
  • Swift 3.1
ファイル構成とやりたいことは下記。
PlayViewController.swift
PlayView.swift
PlayView.xib

PlayViewController内でPlayViewを生成する。
PlayViewはUIViewを継承していて、xibファイルを元にレイアウト。
これでPlayViewを使用する前に一度実行してみたら、先のエラーが発生しました😇

意味が分からなすぎて発狂するところでしたが、救いの手が🙏
ViewControllerが自動で読むxibファイルに注意

  • XXXViewControllerクラスはXXXViewController.xibを読み込もうとする
  • 読み込めなければ、Controllerを除いたファイルを読み込もうとする(XXXView.xib)
先のような構成だとPlayViewControllerはPlayViewController.xibを読み込もうとするが、用意していないので、次にPlayView.xibを読み込もうとする。
PlayView.xibはたしかにあるのだが、PlayViewで使用されることを想定しているのでエラー。こういうことでした😇
これってXcode側で制御出来ないのかな…まぁApple様の高尚な考えがあるのでしょう。

サイト様の例にもありますが、PlayContentViewなどにリネームするのが良さそうですね🙆

0 件のコメント:

コメントを投稿