ヒレガス本 第6章 nibファイルとNSWindowController(2)

演習問題2でNSBundleを用いて明示的にパネルをロードするというところで詰まっていたが、わかってみれば単純。

まずAppController.hに、Aboutパネル用のインスタンス変数と表示用のメソッドを追加する。

#import <Cocoa/Cocoa.h>

@class PreferenceController;

@interface AppController : NSObject {
	PreferenceController *preferenceController;
	NSWindowController *aboutWindowController;
}

- (IBAction)showPreferencePanel: (id)sender;
- (IBAction)showAboutPanel: (id)sender;

@end

表示用メソッドはこんな感じ。

- (IBAction)showAboutPanel: (id)sender
{
	if (!aboutWindowController) {
		aboutWindowController = [[NSWindowController alloc] init];
		[NSBundle loadNibNamed: @"About" owner: aboutWindowController];
	}
	[aboutWindowController showWindow: self];
	[[aboutWindowController window] makeKeyAndOrderFront: self];
}

明示的とはいえ、ownerとなるNSWindowControllerがいずれにしても必要というところに気付けばあとは簡単。