LoginSignup
4
6

More than 5 years have passed since last update.

UIStoryboardからUIViewController取得する過程で間違ったStoryboard名を渡して落とさないためのUIViewControllerExtension

Last updated at Posted at 2016-02-04

概要

UIStoryboardインスタンス生成時に存在しないStoryboardファイルの名前を渡すと NSInvalidArgumentExceptionが発生します。

そもそも渡す名前を間違えなければ問題ないのですが、気になったので安全な方法が無いか調べてみました。

方法

stackoverflowにありました。😃

NSBundle.mainBundle().pathForResource("StoryboardName", ofType: "storyboardc") でStoryboardのパスがあるかを確認すればいいみたいです。


import UIKit

extension UIViewController {

    public class func safetyDestinationViewController(storyboardName: String) -> UIViewController? {

        guard let _ = NSBundle.mainBundle().pathForResource(storyboardName, ofType: "storyboardc") else{
            return nil
        }

        let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
        guard let vc = storyboard.instantiateInitialViewController() else{
            return nil
        }

        return vc
    }
}

viewControllerのstoryboardIDも指定できるようにしたい所ですが、instantiateViewControllerWithIdentifierメソッドに間違ったIDを渡して落ちるときの対処方法がわかりませんでした。。。

参考

Instantiate UIStoryboard at runtime in Swift2, how to handle failure?

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6