Подтвердить что ты не робот

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.

Пожалуйста, дайте мне несколько советов!

Спасибо!

4b9b3361

Ответ 1

Назначенный инициализатор для контроллеров представлений в раскадровках - -initWithCoder:. Поскольку большинство контроллеров просмотра из раскадровки создаются с помощью segues, вы обычно видите состояние, установленное во время -prepareForSegue:sender:.

Если вы создаете экземпляр контроллера просмотра непосредственно из раскадровки, как в приведенном вами примере, выбранный вами шаблон подходит.

Ответ 2

Как еще один "обходной путь" для этой проблемы, вы можете использовать делегирование. Создайте протокол, который будет использоваться в качестве источника данных для вашего подкласса UIViewController из раскадровки. Соответствуйте этому протоколу источника данных, реализуйте его и используйте его сразу после загрузки вашего подкласса UIViewController:

required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)

        //invoke your data source here
    }

Я знаю... Мне тоже это не нравится, но...;)