Подтвердить что ты не робот

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
4b9b3361

Ответ 1

Выходы установлены после -init и до -awakeFromNib. Если вы хотите получить доступ к выходам, вам нужно сделать это в -awakeFromNib или другом методе, который выполняется после того, как выходы установлены (например, -[NSWindowController windowDidLoad]).

Когда загружается файл nib:

  • Объекты в файле nib выделяются/инициализируются, получая либо -init, -initWithFrame:, либо -initWithCoder:
  • Все соединения восстановлены. Сюда входят действия, выходы и привязки.
  • -awakeFromNib отправляется объектам интерфейса, владельцам файлов и прокси-объектам.

Подробнее о процессе загрузки nib вы можете узнать в Руководство по программированию ресурсов.

Ответ 2

Когда в init, представление не будет настроено правильно, а розетки не будут подключены. Вот почему вы используете awakeFromNib: в этом случае - все настроено и готово к использованию.