У меня есть подкласс 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.