読者です 読者をやめる 読者になる 読者になる

定食屋おろポン

おろしポン酢と青ネギはかけ放題です

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];
}

*1:http://stackoverflow.com/questions/3422839/viewdidload-in-nsviewcontroller

*2:One possible danger with this is that Apple could add -viewWillLoad and -viewDidLoad methods to NSViewController one day. If so, your override of those methods would be called twice.