うちのいぬ Tech Blog

Tech Blog of Uchinoinu/My dog

Segueを使わず、コードで遷移した先のViewControllerでIBOutletがnilになるよってエラーが出る際の対応

状況

環境

方針

  • StoryboardでUIをつくちゃっている
  • IBOutletを使っている
  • せめて遷移にはSegueではなくコードを使う

問題点

  • 遷移先でIBOutletさんがnilになります

原因

Segueを使わないので、遷移にはコードを使っていました。

遷移先のViewControllerを呼び出す際にミスをしていました。

let nextVC = NextViewController() // This is bad way
navigationController?.pushViewController(nextVC as UIViewController, animated: true)

↑で、NextVieControllerをただただ呼び出しています。

こうすると、ただInstanceを作成しているだけなので、Storyboardの情報は入っていきません。

なので、IBOutletしても、nil、つまりそんなのないよってなるわけです。

対応

Storyboard上での情報を盛り込んだInstanceを作成したらいいので、StoryboardIDを使います。

let nextVC = storyboard?.instantiateViewController(withIdentifier: Const.StoryboardID.nextViewController) as! NextViewController
navigationController?.pushViewController(nextVC as UIViewController, animated: true)

これで、遷移後にIBOutletがnilにならないようになります。

References

zutto-megane.com stackoverflow.com stackoverflow.com stackoverflow.com