2009-06-03 6 views
6

私はinitWithNibNameで作成されたビューコントローラを持っていますが、awakeFromNibが呼び出されていないことがわかりました。 awakeFromNibは、View ControllerがNibからアーカイブされていない場合にのみ呼び出されますか? (つまり、initWithCoderが呼び出されます)awakeFromNibがViewControllerで呼び出されない

答えて

4

UIViewControllerは、表示に必要な場合にのみ、遅延ビューを遅延ロードします。これは、プログラムで-loadViewを使用してビューを作成することも、ペン先からアーカイブを解除することもできます。

ビューを読み込むには、UIViewControllerのviewプロパティを参照します。

+0

"ビューのプロパティを参照する"というヒントをいただき、ありがとうございました。 – Cyrille

17

あなたが探しているものはviewDidLoadだと思います。 awakeFromNibは、ペン先からロードされたオブジェクトに対してのみ呼び出されます。コントローラ自体はviewDidLoad:を受信します。 initWithNibName:bundle:に電話しているので、実際にペン先からアーカイブされていません。

+1

私はviewDidLoadが呼び出されるという事実を知っていますが、なぜawakeFromNibがそうでなかったのか分からなかったのは、ビューコントローラがNIBのファイル所有者であるためアーカイブされず、IBOutletとIBActionがフックアップされたためです。ので、私は考えました。 – Boon

+1

ファイル所有者は実際のインスタンスではなくUIViewControllerのプロキシです。恐らく、ビューコントローラは、NIBのスコープ外でインスタンス化され、次に、プロキシオブジェクト(ファイル所有者)に指定された関係に従って「有線接続」される。 – teabot

2

awakeFromNibは、iOSのFile's OwnerやFirst Responderなどのプレースホルダーオブジェクトには呼び出されません。 Object Loading Process Docsの#4を参照

関連する問題