ViewController custom init метод с раскадрой
im, имеющее проблемы с переопределением метода инициализации моего CustomViewController, созданного в моей раскадровке.
теперь im делает (в моем mainViewController):
self.customViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"CustomVC"];
self.customViewController.myObject = someObject;
и у меня есть viewDidLoad (CustomViewController)
[self.label setText:self.myObject.someString];
Это работает нормально.
Но правильно ли это? Должен ли я добавить собственный метод инициализации (или переопределить) в свой CustomViewController? Как initWithObject:? Я не знаю, как вызвать свой собственный метод init вместо UIStoryboard instantiateViewControllerWithIdentifier:
, а im не получать вызовы на init
и initWithNibName
.
Возможно, я должен использовать: - (id)initWithCoder:(NSCoder *)decoder
.
Пожалуйста, дайте мне несколько советов!
Спасибо!
Ответы
Ответ 1
Назначенный инициализатор для контроллеров представлений в раскадровках - -initWithCoder:
. Поскольку большинство контроллеров просмотра из раскадровки создаются с помощью segues, вы обычно видите состояние, установленное во время -prepareForSegue:sender:
.
Если вы создаете экземпляр контроллера просмотра непосредственно из раскадровки, как в приведенном вами примере, выбранный вами шаблон подходит.
Ответ 2
Как еще один "обходной путь" для этой проблемы, вы можете использовать делегирование. Создайте протокол, который будет использоваться в качестве источника данных для вашего подкласса UIViewController из раскадровки. Соответствуйте этому протоколу источника данных, реализуйте его и используйте его сразу после загрузки вашего подкласса UIViewController:
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
//invoke your data source here
}
Я знаю... Мне тоже это не нравится, но...;)