Document Base Applicationを作っていると、まずApplication
(NSApplication
のサブクラス)、myDocument
(NSDocument
のサブクラス)とWindowController
のサブクラスをどう協調させていけばいいかに悩みます。
そこで、まずはどういう順番で、どのクラスのどのメソッドが呼ばれるか調べてみました。
結果は以下の通りでした。
- Application - init
- Application - awakeFromNib
- MyDocument - init
- MyDocument - makeWindowControllers
- WindowController - init
- WindowController - awakeFromNib
- MyDocument - awakeFromNib
- Application - applicationDidFinishLaunching
あとは init
とawakeFromNib
の関係ですが、
-
init
は、IBOutlet
ではないインスタンスの初期化メソッド -
awakeFromNib
は、IBOutlet
とインターフェースビルダーでバインドしたオブジェクトがセットされた後呼び出され、outletの設定・初期化を行うためのメソッド
と、考えておけば良さそうです。
そう考えると、MyDocumnent.xibのFile's OwnerであるMyDocmentクラスが、xibの内部にある各オブジェクトの初期化が終わって、アウトレットとのバインドが終わるまでawakeFromNib
が呼ばれない事に辻褄が合います。