2016-05-10 12 views
0

私はビューコントローラのライフサイクルを理解しようとしていますが、私はawakeFromNibについて少し矛盾した記述を読んでいます。ドキュメントによれば、すべての店舗はawakeFromNibであるが、I see that it's not always trueに設定する必要があります。電話の注文はawakeFromNib,prepareForSegueの間でどのようになりますか?店舗はいつ利用可能になりますか?awakeFromNibとアウトレット - awakeFromNibを呼び出すとアウトレットとセグがセットされます

+0

UIViewのライフサイクルで 'awakeFromNib'を使用する方が一般的です。しかし、あなたが探しているのは 'prepareForSegue'、' awakeFromNib'、 'viewDidLoad'です。awakeFromNibでアウトレットにアクセスできますが、まずビューコントローラーのビューにアクセスするために必要な注意書きを読んでください。他の質問のポスターが嘆かわしい、いわゆる「ハック」。 'viewDidLoad'で設定されたView Controllerを行う方がより安全で標準的です。 – beyowulf

+0

ありがとうございます!したがって、完全に初期化されたビューとアウトレットが必要な場合は、[self view] –

+0

でawakeFromNibを開始します。素早く、 'print(self.view)'のようなものを言うことができます。これはやや無意味なので、 'viewDidLoad'を使うことをお勧めします。 – beyowulf

答えて

0

ビューコントローラとそのビュー階層は、実行時に別々のnibファイルからロードされます。ビュー階層へのアウトレットは、ビュー・コントローラがロードされた後に実行されるビュー階層がロードされるまで接続されません。 (詳細はin this answerで説明しています)

ナビゲーションコントローラーに「マスター」ビューコントローラーがあるとします。マスタービューコントローラは、詳細ビューコントローラをプッシュするためにセグを実行します。イベントの順序は次のとおりです。

  1. 詳細ビューコントローラがそのペン先からロードされています。ストーリーボードのシーンに他のトップレベルのオブジェクトが含まれている場合は、これらもロードされます。

  2. 詳細ビューコントローラはawakeFromNibを受け取ります。シーン内の他のトップレベルオブジェクトへのディテールビューコントローラのアウトレットは接続されていますが、ビュー階層へのアウトレットは接続されていません。

  3. マスタービューコントローラは、prepareForSegueを受信し、詳細ビューコントローラを指しています。

  4. Segueは詳細コントローラをプッシュするようにナビゲーションコントローラに要求します。

  5. ナビゲーションコントローラは、詳細ビューコントローラにそのビューを要求し、ナビゲーションコントローラのビュー階層に追加します。

  6. 詳細ビューコントローラはビ​​ュー階層nibをロードします。これにより、詳細ビューコントローラのアウトレットがビュー階層に接続されます。

  7. ビュー階層内のすべてのオブジェクトは、awakeFromNibを受け取ります。

  8. 詳細ビューコントローラはviewDidLoadを受け取ります。

関連する問題