致命错误:init(编码器:)尽管已实现但尚未实现错误

Lee*_*Lee 46 uitableview ios swift

我收到一条错误消息:

致命错误:init(编码器:)尚未实现

为我的习惯UITableViewCell.单元格未注册,故事板中具有标识符单元格以及使用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")
}
Run Code Online (Sandbox Code Playgroud)

但我仍然有错误.谢谢.

小智 115

用编码器方法替换你的init:

required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)

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

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

override func awakeFromNib() {
   super.awakeFromNib()
   //custom logic goes here   
}
Run Code Online (Sandbox Code Playgroud)

  • 嘿工作谢谢!删除了"fatalError("init(编码器:)尚未实现")"并替换为"super.init(coder:aDecoder)".是的,你是正确的,单元格仍然可以在没有inits的情况下工作,但我想在初始化时为单元格添加一个手势识别器.再次感谢! (2认同)

Nat*_*sha 9

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

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)

其次,您需要删除语句,

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

那应该工作。