【问题标题】:This class is not key value coding-compliant for the key...why?此类与键的键值编码不兼容……为什么?
【发布时间】:2014-12-31 00:12:31
【问题描述】:

我已将 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)
}

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

*** 由于未捕获的异常“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 兼容的。

【问题讨论】:

标签: ios uitableview swift key-value-observing


【解决方案1】:

在文档大纲上右击显示您的 ViewController 的引用。您可能会在其中一个参考文献中看到警告。如果仍然需要它,请删除它并重新链接。

【讨论】:

    【解决方案2】:

    我创建了一个与您相同的 TableViewCell,并且遇到了同样的问题。我有研究解决问题,但没有。然后我删除TableViewCell中的Label,重新创建,通过File Owner,v..v连接到TableViewCell,结果是对的。没有错误。您应该重新创建它们。

    【讨论】:

      【解决方案3】:

      我链接到了错误的来源!

      结果如下:

      【讨论】:

        【解决方案4】:

        您不应该在tableView:cellForRowAtIndexPath 中自己打电话给instantiateWithOwner

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

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

        【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2017-09-27
          • 2015-08-27
          • 2011-03-17
          • 2012-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多