这个类不是密钥值编码兼容的密钥...为什么?

时间:2014-11-04 07:08:47

标签: ios uitableview swift key-value-observing

我已将IB的输出链接到代码,如下所示。

class DiaryTableViewCell: UITableViewCell {
    @IBOutlet weak var TitleLabel: UILabel!
    @IBOutlet weak var SubTitleLabel: UILabel!
    @IBOutlet weak var leftImageView: UIImageView!
    @IBOutlet weak var rightImageView: UIImageView!
}

在这里,我正在注册课程:

override func viewDidLoad() {
   self.title = "My Diary"
   cellNib = UINib(nibName: "TableViewCells", bundle: nil)
   tableView.registerClass(DiaryTableViewCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier)
}

enter image description here

enter image description here

但是我不断收到以下运行时错误:

  

***由于未捕获的异常终止应用程序' NSUnknownKeyException',原因:' ... setValue:forUndefinedKey:]:此类不是键值   符合编码的关键字SubTitleLabel。'

从以下代码中:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

var cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as DiaryTableViewCell?

if (cell == nil) {
    tableView.registerClass(DiaryTableViewCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier)
    cell = cellNib?.instantiateWithOwner(self, options: nil)[0] as? DiaryTableViewCell
                cell?.selectionStyle = .None
}

if (cell != nil) {
    println("\(x++)) Inside cell")
    cell!.TitleLabel.text = "Hello"
    cell!.SubTitleLabel.text = "World"
}

return cell!
}

具体来说,它发生在这里:

cell = cellNib?.instantiateWithOwner(self, options: nil)[0] as? DiaryTableViewCell

问题:我如何违反UILabel的密码值编码?

这还没有发生...... UILabel符合KVO。

5 个答案:

答案 0 :(得分:8)

我链接到错误的来源!

enter image description here

结果如下:

enter image description here

答案 1 :(得分:1)

您不应该在instantiateWithOwner内亲自致电tableView:cellForRowAtIndexPath

viewDidLoad中注册笔尖,然后dequeueReusableCellWithIdentifier将为您完成所有工作。

您遇到特定错误的原因是您正在调用instantiateWithOwner作为所有者传递self,因此笔尖正在尝试将出口连接到您的UITableViewDataSource实施类而不是DiaryTableViewCell

答案 2 :(得分:0)

有时它就像你在你的xib中创建按钮一样,你创建一个按钮并从一个按钮复制粘贴其他按钮,在这种情况下会发生这个错误,是的,从xib删除的连接也可能是一个原因。

答案 3 :(得分:0)

我创建了一个与你的&相同的TableViewCell有同样的问题。我有研究解决问题,但没有。然后我删除TableViewCell中的Label并再次重新创建,通过文件所有者将其连接到TableViewCell,v..v结果是正确的。没错。你应该重新创建它们。

答案 4 :(得分:0)

显示ViewController的引用,然后在文档大纲上单击鼠标右键。您可能会在其中一个参考文献中看到警告。删除它并在仍然需要时再次链接。

enter image description here