iOS - Выходы построителя интерфейса не инициализированы - PullRequest
3 голосов
/ 30 марта 2012

Я создал представление в Интерфейсном Разработчике с некоторыми метками и текстом как IBOutlets.Я прекрасно вижу этот экран, когда переходю к нему из другого представления, которое я определил в раскадровке.Однако у меня есть другой XIB и связанный с ним UIViewController, с которого я хочу получить доступ к этому представлению.Поскольку мой XIB отсутствует в раскадровке, я не могу перейти к нему.Вместо этого я должен выполнить переход программно.

    PlantDetailViewController *plantDetailVC = [[PlantDetailViewController alloc] init];
    [self.currentNavigationController pushViewController:plantDetailVC animated:YES];

Когда этот код выполняется, он переходит в представление, но представление просто пустое.Я отладил код, и он входит в viewDidLoad и viewWillAppear, однако все мои IBOutlets имеют значение NIL .... поэтому на экране ничего не отображается!

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

Спасибо

Брайан

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Звучит так, как будто вы говорите, что в вашей раскадровке настроено PlantDetailViewController, а некоторые OtherViewController созданы вне вашей раскадровки.Теперь вы хотите, чтобы OtherViewController создал экземпляр PlantDetailViewController, который был установлен в вашей раскадровке.

Допустим, ваша раскадровка называется MainStoryboard.storyboard.

Сначала вам нужно установить идентификаториз PlantDetailViewController в вашей раскадровке.Вы делаете это в Инспекторе Атрибутов, под секцией Контроллера Представления.Допустим, вы установили PlantDetail.

Тогда, в OtherViewController, это должно работать:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
PlantDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PlantDetail"];
[self.currentNavigationController pushViewController:vc animated:YES];
0 голосов
/ 30 марта 2012

-init не загружает файл пера для вас, если вы хотите загрузить перо, используйте -initWithNibName:bundle:

Если вы используете соглашения по именованию пера, вы можете передать nil для загрузки пераname соответствует вашему классу и комплекту по умолчанию, т.е. [[PlantDetailViewController alloc] initWithNibName:nil bundle:nil], подробности смотрите в документации по -nibName.

...