Segueを使わず、コードで遷移した先のViewControllerでIBOutletがnilになるよってエラーが出る際の対応
状況
環境
- Xcode 8.0 bata
- Swift 3
方針
- 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