Почему мне нужно вызывать showWindow на моем NSWindowController дважды на 10,5? - PullRequest
3 голосов
/ 07 октября 2009

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

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

Видимый при запуске должен быть отключен, если вы хотите использовать -showWindow: для контроля времени видимости этого окна.

Все остальное кажется прямо из того, что вы нам показали, так что это всего лишь предположение, но вы забыли подключить розетку window в вашем объекте "Владелец файла" к окну в вашем перо?

0 голосов
/ 07 октября 2009

Редактировать: ОК Извините, я неправильно понял ваш вопрос и вижу, что вам нужно дважды вызвать showWindow. У меня нет ответа на этот вопрос.

Поведение, которое вы видите, правильное, так как метод initWithWindowNibName: фактически не загружает перо. Загрузка пера происходит лениво ... поэтому после вызова метода showWindow или какого-либо другого метода, такого как window, для которого требуется загрузка пера.

0 голосов
/ 07 октября 2009

Вы вызываете -showWindow до того, как окно завершит загрузку с его кончика? Возможно, вы захотите установить точку останова в [MyWindowController awakeFromNib], чтобы выяснить это.

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