init и awakeFromNib - PullRequest
       2

init и awakeFromNib

15 голосов
/ 22 июня 2011

Я хотел бы понять, почему, если я пытаюсь установить значение (например, 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

Ответы [ 2 ]

40 голосов
/ 22 июня 2011

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

Когда загружен файл пера:

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

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

5 голосов
/ 22 июня 2011

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

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