После использования 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];
}
}
Снимите флажок "Видимо при запуске" для окна в Интерфейсном Разработчике, если вы не хотите, чтобы оно отображалось при загрузке пера.