2012-04-25 12 views
11

View ControllerでviewDidLoadが呼び出されるとすぐにストーリーボードセグをトリガーしようとしています。 segueには識別子が付けられており、ボタンや他のコントロールにリンクされたメソッドの内部から呼び出されたときにうまく動作します。しかし、viewDidLoadの内部では動作しません。ただ静かに失敗します。 viewDidLoadでsegueが無視されるというルールがありますか?viewDidLoad内でSegueWithIdentifierが動作しないのはなぜですか?

私はこの両方試してみた:

[self performSegueWithIdentifier: @"mySegue" 
          sender: self]; 

と、この:

[self dismissViewControllerAnimated:YES completion:^() { 
[self performSegueWithIdentifier:@"mySegue" sender:self]; 
}]; 

どちらも仕事を。

+0

別のビューが表示される直前に別のビューをロードしたいのはなぜですか?あなたは代わりに "viewWillAppear"でそれを追加しようとしましたか(私はなぜあなたがそれを望むか分からない)。 – Pochi

答えて

19

まだ表示されていないビューコントローラを閉じることはできません。 didLoadは完全にメモリ管理機能を持っていますので、(aの)コンストラクタの一部として使用できます。 何がうまくいくかは、viewDidAppearでセグを開始することですが、初めて表示するビューから開始することをお勧めします。

1

ほとんどの理由は、OSが進行中に2番目の画面遷移呼び出しを無視している可能性があります。 ViewDidLoadでは、(現在のビューの)ビュー遷移はまだ完了していません。完了する前に別のトランジションを要求しており、OSはそれを無視します。これは、別の関数から呼び出されたときにsegueが機能する理由でなければなりません。 ViewDidAppearの中で呼び出す(または時間の遅れの後に)

関連する問題