У меня есть подкласс NSWindowController, который я использую, чтобы загрузить окно из наконечника и показать его на экране. Ниже приведен код, который вызывается, когда я хочу показать окно. В 10.6, когда showCustomWindow называется, отображается окно, но в 10.5 этот метод нужно вызывать дважды, чтобы отобразить окно.Почему я должен вызвать showWindow на моем NSWindowController дважды в 10.5?
-(IBAction)showCustomWindow:(id)sender
{
if(!windowController){
windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow"];
}
[windowController showWindow:self];
}
В окне «Видимый при запуске» отмечено и снятие флажка, похоже, не имеет значения.
Редактировать: Я понял, что проблема, с которой я столкнулась, не была связана с моим NSWindowController или showWindow. Я правильно настроил это. Однако я выяснил, что не все классы реализуют awakeFromNib. В одном из моих подклассов NSView (который был в nib, который я пытался загрузить), я вызывал [super awakeFromNib], который давал мне «не отвечает на селектор» (но только на 10.5, что странно). Таким образом, я мог бы просто вынимаю [супер awakeFromNib], но я выбрал для надеюсь, более надежным:
if([NSView instancesRespondToSelector:@selector(awakeFromNib)]) {
[super awakeFromNib];
}
Это позволило моему перу, чтобы загрузить нормально и ShowWindow, чтобы работать должным образом.
Документы читаются следующим образом: «Вы должны назвать супер-реализацию awakeFromNib только в том случае, если вы точно знаете, что ваш суперкласс обеспечивает реализацию. Поскольку Application Kit не предоставляет стандартную реализацию метода awakeFromNib, вызывая супер-результаты в исключение, если родительский класс не реализует его. Классы, чей непосредственный родительский класс NSObject или NSView не требуют вызова супер-реализации ». Другими словами, не надо называть его супер, если это просто подкласс NSView. – 2009-12-28 22:32:41