如何在 UITabBarController 中使用自定义初始化程序注入依赖项?
How could I inject dependency with custom initializer in UITabBarController?
我有一个没有任何 NIB 文件的自定义 UITabBarController。所有模块的导航控制器都是在 viewDidLoad 方法中使用创建者函数创建的。我想通过这样的创建者函数添加带有参数的 coreDataStack:
override func viewDidLoad() {
super.viewDidLoad()
let aModuleNavCont = aModuleBuilder.createaModule(coreDataStack) as! UINavigationController
...
}
但在此之前我必须在我自己的 UITabBarController class 中设置 coreDataStack 属性。
我写了这个 init:
init(coreDataStack: CoreDataStack) {
self.coreDataStack = coreDataStack
super.init(nibName: nil, bundle: nil)
}
但是它说:'required'初始化器'init(coder:)'必须由'UITabBarController'的subclass提供因此我用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 添加了这些初始化要求......)
我有一个没有任何 NIB 文件的自定义 UITabBarController。所有模块的导航控制器都是在 viewDidLoad 方法中使用创建者函数创建的。我想通过这样的创建者函数添加带有参数的 coreDataStack:
override func viewDidLoad() {
super.viewDidLoad()
let aModuleNavCont = aModuleBuilder.createaModule(coreDataStack) as! UINavigationController
...
}
但在此之前我必须在我自己的 UITabBarController class 中设置 coreDataStack 属性。 我写了这个 init:
init(coreDataStack: CoreDataStack) {
self.coreDataStack = coreDataStack
super.init(nibName: nil, bundle: nil)
}
但是它说:'required'初始化器'init(coder:)'必须由'UITabBarController'的subclass提供因此我用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 添加了这些初始化要求......)