2009-06-03 5 views
6

У меня есть контроллер представления, который создается через initWithNibName, и я только что узнал, что awakeFromNib не вызывается. Вызывается awakeFromNib только тогда, когда контроллер просмотра не имеет аналогов из Nib? (т. е. вызывается initWithCoder)awakeFromNib не вызывается в моем ViewController

ответ

4

UIViewController лениво загружает свой просмотр, только когда он необходим для отображения. Это касается как программного создания представления, использующего -loadView, так и unarchiving из ниба.

Вы можете заставить представление загрузить, указав свойство представления UIViewController.

+0

Спасибо за отзыв «ссылка на представление», это именно то, что я искал. – Cyrille

17

Я думаю, что вы ищете viewDidLoad. awakeFromNib вызывается только для объектов, загружаемых из наконечника. Сам контроллер получает viewDidLoad:. Поскольку вы звоните initWithNibName:bundle:, на самом деле он не разрхивирован из ниба!

+1

Мне известно о том, что будет вызван viewDidLoad, но не был уверен, почему awakeFromNib не был, потому что контроллер представления является файловым владельцем NIB, поэтому он будет неархивирован, а его IBOutlet и IBAction подключены или поэтому я подумал. – Boon

+1

Владелец файла является прокси для UIViewController, а не фактическим экземпляром. Предположительно, контроллер представлений создается вне области действия NIB и затем «подключен» в соответствии с отношениями, указанными в прокси-объекте - владельцем файла. – teabot

2

awakeFromNib не вызывается для объектов-заполнителей, таких как владелец файла и первый ответчик в iOS. См. # 4 в Object Loading Process Docs

Смежные вопросы