首页 > 解决方案 > 来自故事板的初始化“此编码器要求从 initWithCoder 返回替换的对象”Swift

问题描述

我想从情节提要中注入一个 QuizMangerClass。

但是我收到错误“此编码器要求从 initWithCoder 返回替换的对象”。

private var quizManagerClass: QuizManagerProtocol

init(quizManager: QuizManagerProtocol) {
    self.quizManagerClass = quizManager
    super.init(nibName: nil, bundle: nil)
}

public init?(coder aDecoder: NSCoder, quizManager: QuizManagerProtocol){
    self.quizManagerClass = quizManager
    super.init(coder: aDecoder)
}

// called from SB
convenience required init?(coder aDecoder: NSCoder) {
    self.init(coder: aDecoder, quizManager: QuizManagerMultiton.createQuizManager())
}

关于 SO 的其他问题是指情节提要、单元格和其他琐事上的出口,这些问题根本不适用于这个问题。

我希望能够初始化 QuizManager 以便在测试期间注入它,并不断出现相同的错误。

解决办法是什么?

我当前的代码在这里:https ://github.com/stevencurtis/quizissue

标签: swift

解决方案


我通过减少两个初始化来让它工作

required init?(coder aDecoder: NSCoder) {
  self.quizManagerClass = QuizManagerMultiton.createQuizManager()

  super.init(coder: aDecoder)
}

另外,我认为您的代码无法运行,因为 QuizManager 需要可从 NSCoder 实例化。

“此编码器要求从 initWithCoder 返回替换的对象”

编辑:错别字


推荐阅读