In case you want to get the active storyboard for a viewController, there’s a storyboard property. This is how I solved it, instead of making a new instance:
LoginViewController *vc = [navController.storyboard instantiateViewControllerWithIdentifier:@"firstLaunch"];
[navController presentModalViewController:vc animated:YES];
In Swift you’d call:
let loginViewController = navigationController?.storyboard?.instantiateViewController(withIdentifier: "firstLaunch") as! LoginViewController
navigationController?.present(loginViewController, animated: true, completion: nil)
You could also be a lot safer by using guards against the navigation controller and the storyboard. I’ve used as!
so as to guarantee that you’re getting a LoginController.