У меня есть простое приложение Какао с помощью подкласса NSWindowController. В пере я установил:
init метод моего подкласса NSWindowController называют (я звоню супер), но не имеют значение, что я делаю windowDidLoad никогда не называют.
Я должен пропускать что-то очевидное, но ни за что в жизни я не могу выяснить, каково это.
Вы пытаетесь создать экземпляр NSWindowController
, инстанцировав его в другом nib-файле. Однако, когда вы инстанцируете объект в nib-файле, он инициализируется вызовом -initWithCoder:
.
-initWithCoder:
не является назначенным инициализатором NSWindowController
, поэтому ваш экземпляр NSWindowController
никогда фактически не загружает свой nib.
Вместо инстанцирования экземпляра NSWindowController
путем размещения его в файле MainMenu.xib
в Interface Builder, создайте его программно:
In AppDelegate.h:
@class YourWindowController;
@interface AppDelegate : NSObject
{
YourWindowController* winController;
}
@end
In AppDelegate.m:
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
winController = [[YourWindowController alloc] init];
[winController showWindow:self];
}
- (void)dealloc
{
[winController release];
[super dealloc];
}
@end
In YourWindowController. m:
@implementation YourWindowController
- (id)init
{
self=[super initWithWindowNibName:@"YourWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end
Окно может загружаться по запросу - попробуйте отправить себе window
в -init
. См. обсуждение - [NSWindowController loadWindow]
в документации для получения дополнительной информации.