Cocoaプログラミング第3版 第6章 チャレンジ:デリゲートを作成する

こいつは苦労した。
すぐに抜けてしまいそうなので、やったことをメモする。

新規にプロジェクトを作成するのが面倒なので、SpeakLineを使用した。

APPControllerにプロトコルの追加。ついでに、windowのアウトレットも追加している(IBOutlet NSWindow)

@interface AppController : NSObject <NSSpeechSynthesizerDelegate, NSWindowDelegate>
{
	IBOutlet NSTextField *textField;
	NSSpeechSynthesizer *speechSynth;
	IBOutlet NSButton *startButton;
	IBOutlet NSButton *stopButton;
	IBOutlet NSTableView *tableView;
	NSArray *voiceList;
	IBOutlet NSWindow *window;
}
- (IBAction)sayIt:(id)sender;
- (IBAction)stopIt:(id)sender;
@end

デリゲート先のメソッドも追加。これは実装クラス(AppController.m)に追加した。

- (NSSize) windowWillResize:(NSWindow *)sender
toSize:(NSSize)frameSize
{
	NSSize mySize = frameSize;
	mySize.height = mySize.width / 2;
	NSLog(@"mySize is %f wide and %f tall", mySize.width, mySize.height);
	return mySize;	
}

追加したメソッドが呼ばれるように、明示的にsetDelegateも追加した。

- (id)init
{
	[super init];
	
	NSLog(@"init");
	
	speechSynth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
	[speechSynth setDelegate:self];
	[window setDelegate:self];
	voiceList = [[NSSpeechSynthesizer availableVoices] retain];
	return self;
}

接続をおこなった

InterfaceBuilderで、NSWindowのアウトレット(window)から表示するウィンドウに紐付け
ウィンドウのWindow ConnectionsのOutlets->delegateにApp controllerを設定

ここまでやって、初めてデリゲートができた。
ウィンドウサイズが縦横が連動して変更された。

Mac OS X Cocoaプログラミング 第三版

Mac OS X Cocoaプログラミング 第三版