XCode4でCocoa/Objective-Cアプリを作成していますが、設定パネルがいつ開かれるかを知る必要があります。windowDidBecomeKeyのようなコールバックが必要です。私はこの質問で提供された解決策に従おうとしましたが、どちらもwindowDidBecomeKey
デリゲートwindowDidExpose
メソッドとして表示されません(ただし、、などの他のメソッドwindowDidLoad
はwindowWillLoad
そうします)。
「デリゲートメソッドとして表示されない」とはどういう意味かを明確にするために、メソッド名を入力し始めたときにオートコンプリートに表示されないことを意味します。とにかくそれらを定義しようとしましたが、呼び出されることはありませんでした。
オブジェクトにはこれらのメソッドがありませNSPanel
んか、それとも私がしなければならないことがもっとありますか?
現在、私はインターフェースを持っていますPrefWindowController
:
PrefWindowController.h:
#import <Cocoa/Cocoa.h>
@interface PrefWindowController : NSWindowController
//Delegate methods like windowDidBecomeKey appear to not be available here
@end
PrefWindowController.m:
@implementation PrefWindowController
- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert setMessageText:@".."];
[alert runModal];
}
return self;
}
- (void)windowDidLoad
{
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert setMessageText:@"Loaded"];
[alert runModal];
}
@end
アプリケーションの起動時にウィンドウが.xibから読み込まれると、起動し、windowDidLoad
上記で定義された通知が表示されます。これは、メソッドが実際に呼び出されていることをテストするためだけに行いました。
パネルが重要になったとき、または焦点が合ったときにコールバックを取得する方法についてのアドバイスは非常に役立ちます。
アップデート:
windowDidBecomeKey
次のようなメソッドをウィンドウコントローラーに追加しました。
PrefWindowController.h:
- (void)windowDidBecomeKey:(NSNotification *)notification;
PrefWindowController.m:
- (void)windowDidBecomeKey:(NSNotification *)notification
{
NSLog(@"Test");
}
ウィンドウを初めて開いたときにテストメッセージがログに記録されますが、main.m
ファイルの戻り行に次のエラーが表示されます。
スレッド1:プログラム受信信号: "EXC_BAD_ACCESS"