当需要在视图控制器之间传递/共享变量(使用故事板)时采用的典型方法是在viewcontroller
方法中获取对目标prepareForSegue:
的引用,并使用属性注入,如下所示: / p>
- (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;
}
}
这种方法的问题(正如我在关于当前项目的域的上下文中看到的那样)是对传递/注入的对象的依赖性不明确。
虽然这种自由(能够在初始化后注入依赖关系)在一些需要灵活性的用例中受到欢迎,但大多数时候我更喜欢安全构造函数注入的感觉。
特别是在像objective-c这样的语言中,传递和发送消息到nil是允许/普通的,在我忘记在正确的位置设置属性的狩猎错误是令人厌烦的,即使有单元测试来支持我。
我想知道的是,是否有办法使用自定义初始化程序,我可以提供所需的参数/依赖项。
有没有办法可以手动控制segue.destinationViewController
的初始化?
答案 0 :(得分:1)
只要我知道你不能。如果您需要自定义初始化,则必须在不使用segue的情况下执行此操作 - 使用init
,手动存储DestinationViewController
并执行您需要执行的操作pushViewController
或presentViewController
。
使用segue的另一个缺点是每次都会重新创建DestinationViewController
。