пользовательский метод init viewController с раскадровкой - PullRequest
50 голосов
/ 18 марта 2012

У меня проблемы с переопределением метода инициализации для моего CustomViewController, который разработан в моей раскадровке.

Сейчас я делаю (в моем 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:?Я не знаю, как вызвать мой пользовательский метод инициализации вместо UIStoryboard instantiateViewControllerWithIdentifier:, и я не получаю вызовы init, ни initWithNibName.

Может быть, я должен использовать: - (id)initWithCoder:(NSCoder *)decoder.

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

Спасибо!

Ответы [ 2 ]

58 голосов
/ 23 марта 2012

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

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

0 голосов
/ 05 мая 2016

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

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

        //invoke your data source here
    }

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

...