【问题标题】:How could I inject dependency with custom initializer in UITabBarController?如何在 UITabBarController 中使用自定义初始化程序注入依赖项?
【发布时间】:2018-11-12 13:44:04
【问题描述】:

我有一个没有任何 NIB 文件的自定义 UITabBarController。所有模块的导航控制器都是在 viewDidLoad 方法中使用 creator 函数创建的。我想通过这样的创建者函数添加带有参数的 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)
}

但它说:'必需'初始化程序'init(coder:)'必须由'UITabBarController'的子类提供因此我用Xcode生成了这个:

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

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

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

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

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

【问题讨论】:

    标签: ios swift uikit uitabbarcontroller nib


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 2018-01-15
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多