2016-08-14 5 views
0

ナビゲーションビューコントローラーを使用し、ストーリーボードを使用して初期ビューコントローラーとして画面を設定しようとしました。ナビゲーションコントローラーを使用しているときに初期View ControllerとしてView Controllerを初期化しますか?[Objective-C]

しかし、私は私のappDelegate.mファイルでプログラム以下のようにすべてをしたとき:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 


    UIStoryboard *storyboard = [UIStoryboard storyboardWithName: @"Main" bundle:nil]; 

    FirstViewController *firstVC = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"]; 


    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC]; 


    self.window =[[[UIApplication sharedApplication]delegate] window]; 

    self.window.rootViewController = navController; 

    return YES; 
} 
  • シミュレーター上の画面に何も表示されています。

  • しかし、私がストーリーボードのそれぞれのビューコントローラのis initial view controllerをチェックして実行したとき。今回は正常に機能し、期待される画面が表示されます。

私の質問は、なぜ私は、プログラムのすべてをやってストーリーボードにis initial view controllerをチェックする必要がありますか?。

ありがとうございます。

答えて

1

didFinishLaunchingWithOptionsに最初のビューコントローラを作成する場合は、UIWindowもインスタンス化する必要があります。しかし、self.windowのあなたの割り当ては、それ自体を取得しているだけで(笑)、何もしません。あなたは、一般的のような何かをしたい:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

あなたは「初期ビューコントローラ」オプションを使用すると、それはあなたがそのオプションをチェックしたときにそれが動作する理由である、あなたのためにこれのすべての世話をします。

そして忘れてはいけない makeKeyAndVisibleへ:

[self.window makeKeyAndVisible]; 

このように:それは動作します

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *firstVC = [storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: firstVC]; 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = navController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 
+0

感謝。しかし、 "UIMainStoryboardFile 'Main'のデフォルトビューコントローラをインスタンス化できませんでした。指定されたエントリポイントが設定されていない可能性があります。 " – AK1

+1

ターゲット設定で "メインインターフェイス"を指定したようです。最初のシーンをインスタンス化する場合は、「メインインターフェイス」でストーリーボードを指定しないでください。 – Rob

+0

あなたが言ったように、私は "メインインターフェース"を指定しようとしませんでしたが、今度は、シミュレータが私に空白の画面を表示します。メッセージはありません。 – AK1

関連する問題