viewWillLoad/viewDidLoad on NSViewController
UIKitのUIViewControllerには
- (void)viewWillLoad; - (void)viewDidLoad;
が定義されています。UIViewControllerのサブクラスにおいて、これらのメソッドは頻繁にオーバーライドされます。
しかし、AppKitのNSViewControllerには存在しません。UIKitに慣れた人がOS XプログラミングでAppKitを触ると、「おい、view(Will|Did)Loadがないじゃねえか!」となります。なりました。
Stack Overflowに、関連するトピックがあります。*1
そこでは、このような解決法が提示されています。
- (void)viewWillLoad { } - (void)viewDidLoad { } - (void)loadView { [self viewWillLoad]; [super loadView]; [self viewDidLoad]; }
しかし、コメント*2で、「Appleが今後 -viewWillLoad と -viewDidLoad を追加したら面倒臭いことになるで!」と指摘されています。
この指摘は至極もっともです。なので、こういうときはアプリケーションのクラスプリフィクスを付けておくのが無難ではないかと思います。
クラスプリフィクスが'MY'のときは以下のようになります。
- (void)MYViewWillLoad { } - (void)MYViewDidLoad { } - (void)loadView { [self MYViewWillLoad]; [super loadView]; [self MYViewDidLoad]; }
クラスプリフィクスを付けるのが嫌ならば、以下のようにするのも良いと思います。
- (void)viewWillLoad { if ([super respondsToSelector:@selector(viewWillLoad)]) { [super performSelector:@selector(viewWillLoad)]; } // Code } - (void)viewDidLoad { if ([super respondsToSelector:@selector(viewDidLoad)]) { [super performSelector:@selector(viewDidLoad)]; } // Code } - (void)loadView { [self viewWillLoad]; [super loadView]; [self viewDidLoad]; }