首页 文章

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

提问于
浏览
2

我将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

Question: 如何违反UILabel的密码值编码?

这在以前没有发生过... UILabel符合KVO标准 .

4 回答

  • 1

    我链接到错误的来源!

    enter image description here

    这是结果:

    enter image description here

  • 0

    你不应该在 tableView:cellForRowAtIndexPath 内自己调用 instantiateWithOwner .

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

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

  • 0

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

  • 5

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

相关问题