0

Типичный подход, используемый для передачи/совместного использования переменных между контроллерами представлений (с использованием раскадровки), заключается в том, чтобы захватить ссылку на цель viewcontroller в методе и использовать инъекцию свойств, например так:Переопределение инициализатора по умолчанию при использовании раскадровки (Инъекция зависимостей конструктора)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"Segue_Name"]) 
    { 
     // Get reference to the target view controller (optional casting) 
     DestinationViewController *vc = (DestinationViewController *)segue.destinationViewController; 

     // Pass any objects/properties 
     vc.whateverObject = object; 
} 

}

проблема с этим подходом (как я вижу это в контексте домена я имею дело с на текущий проект) является то, что зависимость от объекта передается/инъекция не является явной.

Хотя такая свобода (возможность ввода зависимостей после инициализации) приветствуется в некоторых случаях использования, когда требуется гибкость, большую часть времени, которое я предпочитаю, обеспечивает безопасность внедрения конструктора безопасности.

Специально на языке, таком как объектив-c, где прохождение вокруг и отправка сообщений в нуль разрешены/распространены, ошибки охоты, когда я забыл установить свойство в нужном месте, утомительны даже с модульными тестами, чтобы поддержать меня.

Что я хотел бы знать, если есть способ использовать пользовательский инициализатор, я мог бы предоставить столько аргументов/зависимостей, сколько мне нужно.

Есть ли способ, которым я могу вручную управлять инициализацией segue.destinationViewController?

ответ

1

Пока я знаю, вы не можете. Если вам нужна ваша пользовательская инициализация, вы должны сделать это без segues - используя init, сохраните свой DestinationViewController вручную и сделайте все, что вам нужно для этого, pushViewController или presentViewController.

Другим недостатком использования segue является то, что DestinationViewController будет воссоздаваться каждый раз.

+0

Вот что я думал. Полагаю, мне придется придерживаться метода/свойства инъекции или рефакторинг моего кода, чтобы программно обрабатывать segues. – joakim

+0

Или выберите среднюю дорогу и используйте метод инъекции. Таким образом, я могу потерять явные/четкие способы инъекции конструктора, убедившись, что мои объекты не будут находиться в некорректном состоянии в любой точке. – joakim

Смежные вопросы