windowDidResignKeyが呼ばれなくて困ったという話。
NSWindowのサブクラスで↓のようにself.delegate = selfとしてNSWindowDelegateのメソッドを自分で処理しようとしたがdelegateメソッドが全然呼ばれない。
- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag{ self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag]; if (self) { self.delegate = self; ・・・ } return self; } - (void)windowDidResignKey:(NSNotification *)notification; { if (self.isVisible) { self.showing = NO; } }
調べてみたらNSWindowControllerからwindowがロードされたタイミングで強制的にdelegate先がNSWindowControllerにされるっぽい。まじか。。
しょうが無いのでwindowDidResignKeyをNSWindowController側に移して解決した。