После использования loadNibNamed невозможно получить доступ к каким-либо розеткам

Изменить: Если кто-то хочет посмотреть на фактический код, вот он: http://pastie.org/713951

Короче говоря, проблема в том, что я не могу заставить окно отображаться в функции fly().

Полное описание:

Я создаю плагин для Mac-приложения "Coda". У меня есть контроллер "Болдер", с двумя выходами:

@class Bolder;

@interface Bolder : NSObject
{
    IBOutlet id MyLabel;
    IBOutlet id theWindow;
}

Coda определяет свой собственный метод инициализации для плагинов. В этом методе init я загружаю Nib 'Superman' и выбираю метод 'fly' для вызова при нажатии на мой плагин:

[NSBundle loadNibNamed:@"Superman" owner:self];
[controller registerActionWithTitle:NSLocalizedString(@"OK!", @"Flying Man") target:self selector:@selector(fly:)];

В методе "fly" я хочу показать окно и изменить текст на метке:

- (void)fly:(id)sender
{
    [theWindow orderFront:self];
    [theWindow makeKeyAndOrderFront:self];
    [MyLabel setStringValue:@"new text"];
}

Этот последний бит - часть, которая меня бросает - окно просто не появляется! Тем не менее, если я помещу эти те же три строки в "awakeFromNib", это будет хорошо. Что вызывает эту разницу? Я не могу поместить этот код в awakeFromNib, потому что это заставляет окно моего плагина появляться каждый раз, когда я запускаю Coda.

2 ответа

Решение

Попробуйте отложить загрузку пера, пока не пришло время показывать окно. Например:

- (void)fly:(id)sender
{
    if (!theWindow) 
    {
        [NSBundle loadNibNamed:@"Superman" owner:self];
    }
    else
    {
        [theWindow makeKeyAndOrderFront:self];
    }
}

Снимите флажок "Видимо при запуске" для окна в Интерфейсном Разработчике, если вы не хотите, чтобы оно отображалось при загрузке пера.

Другие вопросы по тегам