私はアプリの構築に忙しい-初めて起動したときに、ユーザーに次の2つのことを行うように要求する。
そこからホームビューコントローラに移動します。
私が現在直面している問題は、最初のビューコントローラーをアプリのデリゲートから画面にプッシュすることです。ストーリーボードを使用しています/ 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
です。これは、ストーリーボードの最も外側のView Controllerのタイプが間違っていることを意味します。
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];
}
次の2つのことを行う必要があります。
次に、以下の行を使用します
loginView = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
[(UINavigationController*)self.window.rootViewController pushViewController:loginView animated:NO];
お役に立てれば。それでも問題が解決しない場合はお知らせください。
[self performSegueWithIdentifier:@"buyListSegue" sender:sender];
コントローラ識別子"CountrySettings"
が間違ったコントローラに設定されています。 NavigationController
を呼び出すことができるpushViewController
を取得できません...