Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用故事板时重写默认初始值设定项(构造函数依赖项注入)_Ios_Objective C_Dependency Injection_Storyboard_Uistoryboardsegue - Fatal编程技术网

Ios 使用故事板时重写默认初始值设定项(构造函数依赖项注入)

Ios 使用故事板时重写默认初始值设定项(构造函数依赖项注入),ios,objective-c,dependency-injection,storyboard,uistoryboardsegue,Ios,Objective C,Dependency Injection,Storyboard,Uistoryboardsegue,当需要在视图控制器之间传递/共享变量(使用故事板)时,通常采用的方法是在prepareforsgue:方法中获取对目标viewcontroller的引用,并像这样使用属性注入: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"Segue_Name"]) { // Get reference

当需要在视图控制器之间传递/共享变量(使用故事板)时,通常采用的方法是在
prepareforsgue:
方法中获取对目标
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;
}
}

这种方法的问题(正如我在当前项目中处理的域的上下文中所看到的那样)是对正在传递/注入的对象的依赖不是明确的

尽管这种自由(能够在初始化后注入依赖项)在一些需要灵活性的用例中是受欢迎的,但大多数时候我更喜欢构造函数注入提供的安全感

特别是在像objective-c这样的语言中,传递消息并将消息发送给nil是允许的/常见的,在我忘记在正确的点设置属性的情况下查找bug是令人厌烦的,即使有单元测试来支持我

我想知道的是,是否有一种使用自定义初始值设定项的方法,我可以提供所需的任意多个参数/依赖项


是否有一种方法可以手动控制segue.destinationViewController的初始化?,只要我知道您不能。如果您想要自定义初始化,则必须在不使用分段的情况下执行-使用
init
,手动存储
DestinationViewController
,并使用它执行所需的操作
pushViewController
presentViewController


使用segue的另一个缺点是每次都会重新创建
DestinationViewController

我就是这么想的。我想我必须坚持方法/属性注入,或者重构代码以编程方式处理分段,或者选择中间路线并使用方法注入。这样,我可能会丢失构造函数注入的显式/清晰方式,同时确保我的对象在任何时候都不会处于无效状态。