【问题标题】:fatal error: init(coder:) has not been implemented error despite being implemented致命错误:init(coder:) has not been implemented 错误尽管已实施
【发布时间】:2016-12-22 08:04:49
【问题描述】:

我收到一条错误消息:

致命错误:init(coder:) 尚未实现

对于我的自定义UITableViewCell。该单元未注册,在情节提要中具有标识符 cell,并且在使用 dequeasreusablecell 时。在自定义单元格中,我的初始值为:

代码:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    print("test")
    super.init(style: style, reuseIdentifier: reuseIdentifier)
}

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

但我仍然有错误。谢谢。

【问题讨论】:

  • 这可能是一个愚蠢的建议,但您是否尝试过清理和重建?如果您使用 Xcode 的自动完成建议,Xcode 有时会继续出现错误。
  • 是的,我已经清理并重新启动了。无济于事。

标签: ios swift uitableview


【解决方案1】:

用 coder 方法替换你的 init:

required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)
}

实际上,如果您在 Storyboard 中创建了单元格 - 我相信它应该附加到您尝试创建它的 tableView 上。如果你不在那里执行任何逻辑,你可以删除你的两个 init 方法。

UPD: 如果您需要添加任何逻辑 - 您可以在 awakeFromNib() 方法中执行此操作。

override func awakeFromNib() {
   super.awakeFromNib()
   //custom logic goes here   
}

【讨论】:

  • 你好,谢谢!删除了 "fatalError("init(coder:) has not been implemented")" 并替换为 "super.init(coder: aDecoder)"。是的,你是正确的,单元格在没有初始化的情况下仍然可以工作,但是我想在初始化单元格时向它添加一个手势识别器。再次感谢!
  • 这很好,而且有效,但有人能解释为什么更改初始化程序有效吗?
  • @JamesRyu 在有问题的示例中,初始化程序包含 fatalError("init(coder:) has not been implemented") 行,这会导致调用该初始化程序时崩溃。
  • 我错过了什么吗?我得到“属性.。未在 super.init 调用时初始化。
  • @ScottyBlades 看起来您的实例属性之一在调用 super.init 之前未初始化。
【解决方案2】:

首先,您需要使用声明super.init(coder: aDecoder) 调用超类的init(coder:) 方法。你通过添加来做到这一点 它就在方法签名下,例如-

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
}

其次,你需要删除语句,

fatalError("init(coder:) has not been implemented").

应该可以的。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2022-01-23
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多