I'm busy building an app - that when launched for the first time it asks the user to do two things:
- Select a Country
- Accept T&Cs
From there it goes to the home view controller.
The problem I am currently facing is pushing the first view controller onto the screen from my app delegate. I'm using storyboards / Xcode 5/ iOS7
Here is the code I came up with:
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
BBCounterySettingsViewController *controller = (BBCounterySettingsViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"CountrySettings"];
[navigationController pushViewController:controller animated:NO];
The problem is the app crashes when it hits the last line of code with the following error:
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController pushViewController:animated:]: unrecognized selector sent to instance 0x8e9a400'
Anyone have any ideas what I am doing wrong?
You're expecting the
self.window.rootViewController
to be aUINavigationController
but it's aUIViewController
. This means that the outermost view controller in your storyboard is of the wrong type.A better way to obtain the
UINavigationController
(Which should work in this case) is to use the propertyself.navigationController
on anyUIViewController
.From what I understand you want to present a view the first time the user runs to have the user pick some stuff. What you should then do is present a modal view controller, like this:
I think the controller identifier
"CountrySettings"
is set to the wrong controller. You're not getting aNavigationController
where you can callpushViewController
...There are two things you need to do:
Then you have user the below line
Hope this helps. Let me know if you're still having the issue.