Использует ли Interface Builder метод -init для инициализации контроллеров представления? - PullRequest
20 голосов
/ 29 января 2009

У меня есть контроллер панели вкладок с использованием построителя интерфейса, и каждый элемент панели вкладок связан с контроллером представления (4 вкладки, 4 контроллера представления) Я хочу знать, использует ли Interface Builder метод -init для инициализации контроллера представления, потому что, очевидно, этот метод не вызывается:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

... и я хочу сделать некоторые инициализации. Я не могу добавить это к -viewDidLoad, так как оно вызывается в случае предупреждения памяти. Есть идеи?

Ответы [ 3 ]

47 голосов
/ 29 января 2009

Объекты, загруженные из *.(nib|xib), начинаются с:

- (id)initWithCoder:(NSCoder *)inCoder;

Таким образом, вы можете переопределить это, или если настройка после вызова -initWithCoder: не является проблемой, которую вы можете использовать:

- (void)awakeFromNib;

из протокола NSNibAwaking.

10 голосов
/ 29 января 2009

Я также собирался упомянуть initWithCoder против awakeFromNib.

В общем случае я перезаписываю initWithCoder при выделении памяти для объекта или значений настроек. Если после подключения IBOutlets необходимо выполнить некоторые настройки, переопределите awakeFromNib. До этого момента переменные экземпляра IBOutlet с другими представлениями и элементами управления не были связаны.

6 голосов
/ 29 января 2009

Похоже, что вы хотите реализовать -(void) awakeFromNib.

Ссылка на протокол NSNibAwaking (требуется вход в АЦП)

...