Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 如何使用自定义UIViewController子类初始值设定项实现依赖项注入_Ios_Objective C_Uiviewcontroller_Dependency Injection - Fatal编程技术网

Ios 如何使用自定义UIViewController子类初始值设定项实现依赖项注入

Ios 如何使用自定义UIViewController子类初始值设定项实现依赖项注入,ios,objective-c,uiviewcontroller,dependency-injection,Ios,Objective C,Uiviewcontroller,Dependency Injection,我有一个UITabBarController子类,它依赖于MyAppsData对象。我试图通过添加新的指定初始值设定项,将MyAppsData注入UITabBarController子类,如下所示: - (instancetype)initWithMyAppsData:(MyAppsData *)data { self = [super initWithNibName:nil bundle:nil]; if (self) { self.appData = data

我有一个UITabBarController子类,它依赖于MyAppsData对象。我试图通过添加新的指定初始值设定项,将MyAppsData注入UITabBarController子类,如下所示:

- (instancetype)initWithMyAppsData:(MyAppsData *)data {
    self = [super initWithNibName:nil bundle:nil];
    if (self) {
        self.appData = data;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Setup stuff based on self.appData
}
但是,当我尝试在viewDidLoad中基于self.appData设置内容时,self.appData为nil。结果是:在初始值设定项可以设置appData属性之前,对initWithNibName的调用已经调用了loadView。显然,当您在没有nib的情况下初始化视图控制器时,initWithNibName会这样做。在viewDidLoad中设置视图控制器属性通常比较安全


因此,我的问题是:在以编程方式实例化UIViewController时,使用UIViewController进行依赖项注入的最佳方法是什么?

我怀疑您需要通过调用
[super init]自行处理整个初始化过程
而不是initWithNibName,或者您可以在
视图中访问您的属性将出现
,或者您可以在SwiftI中实现您的类。我怀疑您需要通过调用
[super init]自行处理整个初始化过程
而不是initWithNibName,或者您可以在
视图中访问您的属性将出现
,或者您可以在Swift中实现您的类