viewDidLoad не вызывается родительским UITabBarController - PullRequest
0 голосов
/ 24 марта 2010

Пример: Я создал минимальный набор файлов, которые освещают эту проблему здесь: http://uploads.omega.org.uk/Foo3.zip

Если вызываются viewDidLoad / viewInitWithNibName, отображается окно сообщения. Окно сообщения не отображается, поэтому методы не вызываются.

Подробнее: У меня есть приложение, которое пытается использовать UITabBarController для переключения между несколькими представлениями.

Представления связаны с UITabBarController с помощью построителя интерфейса (выберите вкладку, откройте Атрибуты (Вариант-1) и заполните поле Имя NIB), и поэтому отображаются «автоматически» без дополнительного кода чтобы они появились.

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

Если это предполагаемое поведение, я могу придумать несколько обходных путей, но любые предложения приветствуются:

  1. Удалите UITabBarController и выполните переключение вида самостоятельно (используя initWithNibName и добавьте / вставьте / нажмите / Subview).
  2. Вызовите каждый из дочерних методов viewDidLoad вручную в собственном методе viewDidLoad UITabBarController.

Заранее благодарю за любую помощь, которую вы можете предложить.

Ответы [ 2 ]

1 голос
/ 26 марта 2010

ОК, мне удалось решить эту проблему.

Недостаточно связать NIB с TabBarController - вам также нужно связать файл beind-кода, он не косвенно связывается с NIB, даже если вы правильно указали владельца файла.

Откройте IB и выберите соответствующую страницу. Нажмите в середине, чтобы выбрать контроллер представления. Введите имя NIB для дополнительного представления, затем перейдите на последнюю страницу (вариант 4). В поле «Идентификация класса» введите имя файла с выделенным кодом для вложенного представления NIB.

Теперь все будет хорошо работать.

Я загрузил правильную версию примера кода: http://uploads.omega.org.uk/Foo3-Correct.zip

0 голосов
/ 24 марта 2010

Вы не создаете экземпляр ImportedView нигде в своем проекте, поэтому он не вызывает initXXX или viewDidAnything.Если вы введете свой код предупреждения в [FirstViewController viewDidLoad], он сработает, как и ожидалось.

...