gpt4 book ai didi

ios - 如何在 UITabBarController 中使用自定义初始化程序注入(inject)依赖项?

转载 作者:搜寻专家 更新时间:2023-11-01 06:26:47 30 4
gpt4 key购买 nike

我有一个没有任何 NIB 文件的自定义 UITabBarController。所有模块的导航 Controller 都是在 viewDidLoad 方法中使用创建者函数创建的。我想通过这样的创建者函数添加带有参数的 coreDataStack:

override func viewDidLoad() {
super.viewDidLoad()

let aModuleNavCont = aModuleBuilder.createaModule(coreDataStack) as! UINavigationController
...
}

但在此之前,我必须在我自己的 UITabBarController 类中设置 coreDataStack 属性。我写了这个初始化:

init(coreDataStack: CoreDataStack) {
self.coreDataStack = coreDataStack
super.init(nibName: nil, bundle: nil)
}

但它说:'required' initializer 'init(coder:)' 必须由 'UITabBarController' 的子类提供因此我用 Xcode 生成了这个:

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

现在构建成功,应用程序运行良好(看起来不错),但我有预感这不是很好的解决方案。

我尝试在所需的初始化中添加 super.init(coder: aDecoder) 行,但它说“Property 'self.coreDataStack' not initialized at super.init call”。

我已经尝试了几件事,但我不知道我应该怎么做才能很好地处理这个问题。你能帮忙吗?

提前感谢您提供的任何帮助。

最佳答案

您对此感到紧张是对的,但它实际上是正确的,并且是在您不使用 NIB 时实现 Coder init 的标准方法。

这个藤壶(感觉粘在系统上的奇怪东西)来自 Cocoa 的高度动态特性和 Swift 更严格的初始化要求之间的相互作用。 (Swift 添加这些初始化要求是因为 lessons we learned from ObjC ....)

关于ios - 如何在 UITabBarController 中使用自定义初始化程序注入(inject)依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53263490/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com