ios – 通过AppDelegate以Storyboard方式实例化View Controller

前端之家收集整理的这篇文章主要介绍了ios – 通过AppDelegate以Storyboard方式实例化View Controller前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在建立一个应用程序 – 当第一次启动它时,它要求用户做两件事情:

>选择国家
>接受T& Cs

从那里到家庭视图控制器.

我目前面临的问题是将第一个视图控制器从我的应用程序代理推送到屏幕上.我正在使用storyboards / Xcode 5 / iOS7

这是我提出的代码

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];

问题是应用程序崩溃时遇到以下错误的最后一行代码

* Terminating app due to uncaught exception ‘NSInvalidArgumentException’,reason: ‘-[UIViewController
pushViewController:animated:]: unrecognized selector sent to instance
0x8e9a400’

任何人有什么想法我做错了什么?

解决方法

你期待self.window.rootViewController是一个UINavigationController,但它是一个UIViewController.这意味着你的故事板中的最外面的视图控制器的类型是错误的.

获取UINavigationController(在这种情况下应该工作)的更好的方法是在任何UIViewController上使用属性self.navigationController.

根据我的理解,您希望在用户第一次运行时让用户选择一些东西.你应该做的是呈现一个模态视图控制器,像这样:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//isFirstRun is some boolean you use to determine if it's the first run
if(isFirstRun){
    BBCounterySettingsViewController *controller = (BBCounterySettingsViewController *)[mainStoryboard instantiateViewControllerWithIdentifier: @"CountrySettings"];
    [self.window.rootViewController presentViewController: controller animated:YES completion:nil];
}
原文链接:https://www.f2er.com/iOS/330611.html

猜你在找的iOS相关文章