'必需的'初始化'init(coder :)'必须由'UITableViewCell'`的子类提供

据说这个代码在这里和这里工作 ,但我似乎无法使其工作。

IBOutlets连接到故事板中的对象。 prototypeCell被命名,所以我可以使用它与dequeueReusableCellWithIdentifier和它的自定义类属性设置为commentCell

第一个错误(我可以解决,但上面的链接都不需要它,这让我觉得我做错了什么,对吗?):

 Overriding method with selector 'initWithStyle:reuseIdentifier:' has incompatible type '(UITableViewCellStyle, String) -> commentCell' 

第二个错误(有趣的错误):

 'required' initializer 'init(coder:)' must be provided by subclass of 'UITableViewCell'` 

单元分类代码:

 class commentCell: UITableViewCell { @IBOutlet weak var authorLabel: UILabel! @IBOutlet weak var commentLabel: UITextView! init(style: UITableViewCellStyle, reuseIdentifier: String) { super.init(style: style, reuseIdentifier: reuseIdentifier) } override func awakeFromNib() { super.awakeFromNib() } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } } 

初始化代码:

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { println(comments[indexPath.row]) var cell = self.tableView.dequeueReusableCellWithIdentifier("prototypeCell") as commentCell cell.commentLabel.text = comments[indexPath.row]["comment"] as NSString cell.authorLabel.text = comments[indexPath.row]["fromid"] as NSString return cell } 

第一个初始化程序的正确签名是这样的:

 init(style style: UITableViewCellStyle, reuseIdentifier reuseIdentifier: String?) 

请注意, reuseIdentifier是一个可Optional ,如?

如果您重写某个类的指定初始值设定项,则不会inheritance其他指定的初始值设定项。 但是UIView采用NSCoding协议,它需要一个init(coder:)初始化器。 所以你也必须实现那个:

 init(coder decoder: NSCoder) { super.init(coder: decoder) } 

但是,请注意,除了调用超级函数之外,您实际上并没有在任何初始化程序中做任何事情,所以您不需要实现任一初始化程序! 如果你不覆盖任何指定的初始值设定项,你将inheritance你所有的超类的指定初始值设定项。

所以我的build议是,你只是删除你的init(style:reuseIdentifier:)初始化器,除非你要添加一些初始化。

如果您打算为其添加一些初始化,请注意,故事板中的原型单元格不是init(style:reuseIdentifier:)初始化的。 它们由init(coder:)初始化。

不知道为什么你需要一个自定义的UITableViewCell类,如果你正在使用原型单元格的故事板。 您可以将标签和文字查看放入单元格中,然后使用它们。

如果你是从xib工作,然后我得到它,但你只需要:

 class commentCell: UITableViewCell { @IBOutlet weak var authorLabel: UILabel! @IBOutlet weak var commentLabel: UITextView! } 

然后你将在TableView类中注册xib:

 override func viewDidLoad() { super.viewDidLoad() self.tableView.registerNib(UINib(nibName: "commentCell", bundle: nil), forCellReuseIdentifier: "reuseIdentifier") } 

关于cellForRowAtIndexPath函数,现在语法稍加修改:

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var cell = self.tableView.dequeueReusableCellWithIdentifier("prototypeCell") as commentCell return cell } 

如果你想发布到github,我们可以帮助修改。 没有看到更多的代码就很难具体。