NSWindowController windowDidLoad не вызывается - PullRequest
10 голосов
/ 23 апреля 2010

У меня есть простое приложение Какао, использующее подкласс NSWindowController.В кончике я установил:

  • Класс владельца файла для моего подкласса NSWindowController
  • Выход «Окно» Владельца файла на основное NSWindow в кончике.

Метод init моего подкласса NSWindowController вызывается (я называю super), но независимо от того, что я делаю, windowDidLoad никогда не вызывается.

Я должен упустить что-то очевидное, но для жизни меняЯ не могу понять, что это такое.

Ответы [ 4 ]

24 голосов
/ 23 апреля 2010

Вы пытаетесь создать экземпляр NSWindowController, создав его экземпляр в другом наконечнике.Однако, когда вы создаете экземпляр объекта в nib-файле, он инициализируется вызовом -initWithCoder:.

-initWithCoder:, который не является назначенным инициализатором NSWindowController, поэтому ваш экземпляр NSWindowController фактически никогда не загружаетсяего перо.

Вместо создания экземпляра NSWindowController экземпляра путем помещения его в файл MainMenu.xib в Интерфейсном Разработчике, создайте его программно:

В AppDelegate.h :

@class YourWindowController;
@interface AppDelegate : NSObject
{
    YourWindowController* winController;
}
@end

В AppDelegate.m :

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    winController = [[YourWindowController alloc] init];
    [winController showWindow:self];
}
- (void)dealloc
{
    [winController release];
    [super dealloc];
}
@end

В YourWindowController.m :

@implementation YourWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"YourWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end
14 голосов
/ 20 февраля 2012

Совершенно нормально создавать экземпляр контроллера окна через перо. Вместо использования windowDidLoad в качестве хука, в этом случае вы захотите использовать awakeFromNib.

2 голосов
/ 23 апреля 2010

Окно может быть загружено по требованию - попробуйте отправить window себе в -init. См. обсуждение -[NSWindowController loadWindow] в документации для получения дополнительной информации.

0 голосов
/ 06 июля 2016

если вы написали

TTEst *test3 = (TTEst *)[[NSWindowController alloc] initWithWindowNibName:@"TTEst"];

попробуйте вместо

TTEst *test3 = [[TTEst alloc] initWithWindowNibName:@"TTEst"];

это имеет значение! Конечно, первая строка была ошибкой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...