У меня есть подкласс NSWindowController, который я использую, чтобы загрузить окно из пера и показать его на экране. Ниже приведен код, который вызывается, когда я хочу показать окно. На 10.6, когда вызывается showCustomWindow, отображается окно, но на 10.5 этот метод должен вызываться дважды, чтобы получить окно для отображения.
-(IBAction)showCustomWindow:(id)sender
{
if(!windowController){
windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow"];
}
[windowController showWindow:self];
}
В окне установлен флажок "Видимо при запуске", и снятие отметки с него не имеет значения.
Редактировать: Я понял, что проблема, с которой я столкнулся, не была связана с моим NSWindowController или showWindow. Я правильно настроил это. Однако я обнаружил, что не все классы реализуют awakeFromNib. В одном из моих подклассов NSView (который был в перо, которое я пытался загрузить), я звонил [super awakeFromNib], который давал мне «не отвечает селектору» (но только на 10.5, что странно). Итак, я мог бы просто убрать [super awakeFromNib], но я выбрал более надежный:
if([NSView instancesRespondToSelector:@selector(awakeFromNib)]) {
[super awakeFromNib];
}
Это позволило моему пиру загружаться нормально и showWindow работать правильно.