2

知っておくべき重要なことは、ストーリーボードを使用しているということです。私はdidFinishLaunchingWithOptionsで次のことをしています:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];

FirstView *mvc = [sb instantiateViewControllerWithIdentifier:@"FirstView"];
SecondView *tvc = [sb instantiateViewControllerWithIdentifier:@"SecondView"];

NSArray* controllers = [NSArray arrayWithObjects:[self addNavigationToViewController:mvc], [self addNavigationToViewController:tvc], nil];

// add controllers to a table view
UITabBarController *tb = [[UITabBarController alloc] init];
[tb setViewControllers:controllers];

[self.window setRootViewController:tb];

addNavigationToViewControllerは、UINavigationController内にViewControllerを埋め込むために使用しているメソッドです。

このアプリを実行するinitWithCoderと、FirstViewのが2回呼び出されます。理由はわかりましたが、正しい方法がわかりません。

基本的に、FirstViewは初期シーンであるため(属性インスペクターに「初期ビューコントローラーです」というビューを設定するチェックマークがあります)、2回目は初期化されます。

FirstView *mvc = [sb instantiateViewControllerWithIdentifier:@"FirstView"];

[初期シーン]のチェックを外すと、「指定されたエントリポイントが設定されていない可能性があります」というメッセージが表示されます。

私は何か間違ったことをしていますが、それが何であるかわかりません。

ヒントをいただければ幸いです。

4

2 に答える 2

4

ストーリーボードを使用するアプリケーションでは、アプリの起動時に、UIKit は情報 plist でUIMainStoryboardFile キーを探します。設定されている場合、UIKit はそのストーリーボードを参照し、-[UIStoryboard instantiateInitialViewController] を使用して、ウィンドウにアタッチするデフォルトのルート ビュー コントローラーを作成します。

UIKit がそれを行っており、後で -didFinishLaunchingWithOptions: で、View Controller の新しいインスタンスも作成しています。これが、2 回インスタンス化されている理由です。

このプロセスを完全にカスタマイズしたい場合、そしてそのように見える場合は、おそらく UIKit がユーザーに代わってこれらのデフォルト アクションを実行することを望まないでしょう。info.plist から UIMainStoryboardFile キーを削除するだけで、-didFinishLaunchingWithOptions: のオーバーライドで次のことができます。

  1. ウィンドウを作成する
  2. ストーリーボードをつかむ
  3. ストーリーボードからビュー コントローラーをインスタンス化します。
  4. ウィンドウのルート ビュー コントローラーを設定します。
  5. 窓の鍵と見えるようにします。
于 2012-07-02T19:01:55.257 に答える
0

あなたが言及した以上の理由がない限り、おそらく電話する必要はまったくありませんinstantiateViewControllerWithIdentifier。ストーリーボードを使用している場合、ほとんどの場合、UITabBarControllerストーリーボードでビュー コントローラーを定義し、 MainTabBarController「初期ビュー コントローラー」にすることができます (すべきです)。ストーリーボードのナビゲーション コントローラーにビュー コントローラーを埋め込むこともできます。

于 2012-07-01T20:40:36.263 に答える