Я пишу приложение Cocoa / Objective-C в XCode4, и мне нужно знать, когда открыта моя панель настроек. Мне нужен какой-нибудь обратный вызов, например 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"