Init и awakeFromNib
Я бы хотел понять, почему, если я пытаюсь установить значение (I.e. setAlphaValue или setTitle) для объекта (например, NSButton) в методе init, ничего не происходит, но если я вызываю функцию setter в awakeFromNib, он работает правильно.
@interface appController : NSObject {
NSButton *btn;
}
@end;
@implementation appController
-(void)awakeFromNib {
//it works
[btn setTitle:@"My title"];
}
-(id)init {
self = [super init];
if(self){
//it doesn't works
[btn setTitle:@"My title"];
}
}
@end
Ответы
Ответ 1
Выходы установлены после -init
и до -awakeFromNib
. Если вы хотите получить доступ к выходам, вам нужно сделать это в -awakeFromNib
или другом методе, который выполняется после того, как выходы установлены (например, -[NSWindowController windowDidLoad]
).
Когда загружается файл nib:
- Объекты в файле nib выделяются/инициализируются, получая либо
-init
, -initWithFrame:
, либо -initWithCoder:
- Все соединения восстановлены. Сюда входят действия, выходы и привязки.
-
-awakeFromNib
отправляется объектам интерфейса, владельцам файлов и прокси-объектам.
Подробнее о процессе загрузки nib вы можете узнать в Руководство по программированию ресурсов.
Ответ 2
Когда в init, представление не будет настроено правильно, а розетки не будут подключены. Вот почему вы используете awakeFromNib:
в этом случае - все настроено и готово к использованию.