Типичный подход, используемый для передачи/совместного использования переменных между контроллерами представлений (с использованием раскадровки), заключается в том, чтобы захватить ссылку на цель 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
?
Вот что я думал. Полагаю, мне придется придерживаться метода/свойства инъекции или рефакторинг моего кода, чтобы программно обрабатывать segues. – joakim
Или выберите среднюю дорогу и используйте метод инъекции. Таким образом, я могу потерять явные/четкие способы инъекции конструктора, убедившись, что мои объекты не будут находиться в некорректном состоянии в любой точке. – joakim