前回まででまずはプロジェクトはできた。
しかし、ViewerController に関しては、Xcode 任せの状態であるため、次に、プロジェクトにこの派生クラスの追加をしよう。
NSWindowController 派生クラスの追加
まず、プロジェクト(本当は「ターゲット」だが)に NSWindowController 派生クラスを追加する。

名前はなんでもいいのだが、諸々の事情で PHWindowController とした。
ファイルが追加できたら、画面左にある(↓)の項目を切り替えて、現在の WindowController を PHWindowController に変更する。

この時点で run させても、変更前と動作は変わらない。
独自機能を追加するため windowDidLoad をオーバーライドする。
なお、Objective-C における override はかなり簡単で、親クラスの同名メソッドを書き換えるだけでいい。
今回は
[self.window makeKeyAndOrderFront:self];
[self.window center];
の2行を追加した。
ヘッダファイル PHWindowController.h は以下の通り。
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface PHWindowController : NSWindowController
//- (instancetype)init;
//@property(strong) NSWindow *window;
@end
NS_ASSUME_NONNULL_END
PHWindowController.m は以下の通り。
#import "PHWindowController.h"
@interface PHWindowController ()
@end
@implementation PHWindowController
/*
- (instancetype)init
{
self = [super init];
return self;
}
*/
- (void)windowDidLoad {
[super windowDidLoad];
[self.window makeKeyAndOrderFront:self];
[self.window center];
}
@end
これでランさせると以下のようになる。

変更前には画面やや左下に位置していたウィンドウが中央に配置されるようになった。
ところで、init メソッドは必ずしもいらないようだ。
また、NSWindowController を宣言した時点で window は持っているようで、自分自身のオブジェクトのウィンドウにアクセスする場合は self.window でいいようだ。
こういうクセみたいなものは、やってみないとわからない。
(続く)

