[英]Instantiating a View Controller programmatically with Storyboard from AppDelegate
我正在忙着構建一個應用程序 - 當它第一次啟動它時會要求用戶做兩件事:
從那里它進入家庭視圖控制器。
我目前面臨的問題是將第一個視圖控制器從我的應用代表推送到屏幕上。 我正在使用故事板/ 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];
問題是當應用程序遇到以下錯誤時遇到最后一行代碼時崩潰:
*由於未捕獲的異常'NSInvalidArgumentException'終止應用程序,原因:' - [UIViewController pushViewController:animated:]:無法識別的選擇器發送到實例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];
}
您需要做兩件事:
然后你有用戶下面的行
loginView = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"]; [(UINavigationController*)self.window.rootViewController pushViewController:loginView animated:NO];
希望這可以幫助。 如果你還有這個問題,請告訴我。
[self performSegueWithIdentifier:@"buyListSegue" sender:sender];
我認為控制器標識符"CountrySettings"
設置為錯誤的控制器。 你沒有得到一個可以調用pushViewController
的NavigationController
......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.