initWithNibName не вызывается - PullRequest
       2

initWithNibName не вызывается

7 голосов
/ 08 сентября 2010

Мне нужно добавить в приложение iPhone некоторую пользовательскую логику, чтобы в зависимости от используемой версии iOS выбрать другой файл XIB (т. Е. На iPhone или iPad будут отображаться разные файлы XIB).

IЯ с самого первого дня создал целое приложение для iPhone, и все хорошо, с помощью tabbarcontroller и стандартных контроллеров навигации в каждой вкладке.

Итак, я реализовал:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

метод, только чтобы обнаружить, что он не вызывается.(У меня есть точка останова и лог-операторы, и ничего не получено).

Кто-нибудь знает, почему это может быть? ИЛИ как мне добиться этой функциональности?

Я где-то читал, что initWithNibName вызывается только при его вызове, т.е. когда вы программно строите иерархию представления, это правда ??

Ответы [ 2 ]

7 голосов
/ 08 сентября 2010

Если вы не делаете что-то подобное перед тем, как добавить его в свой контроллер навигации:

SomeViewController *someViewController = [[SomeViewController alloc] initWithNibName:...];

Тогда велика вероятность, что вы переопределите неправильный метод.

Если ваше представлениеконтроллер находится в файле пера, скажем, файл пера вашего навигационного контроллера, он будет разархивирован из файла пера как новый объект контроллера представления, вместо того, чтобы быть создан с его собственным файлом пера, поэтому вышеупомянутый метод вызываться не будет.

Вместо этого вам придется переопределить -awakeFromNib.

6 голосов
/ 08 сентября 2010

Если ваши контроллеры представления загружаются из файла .xib, тогда будет вызываться initWithCoder:.Метод initWithNibName:bundle: используется только для программно создания контроллеров представления.

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