我将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
Question: 如何违反UILabel的密码值编码?
这在以前没有发生过... UILabel符合KVO标准 .
4 回答
我链接到错误的来源!
这是结果:
你不应该在
tableView:cellForRowAtIndexPath
内自己调用instantiateWithOwner
.在
viewDidLoad
中注册笔尖,然后dequeueReusableCellWithIdentifier
将为您完成所有工作 .您的特定错误的原因是您正在调用
instantiateWithOwner
传递self
作为所有者,因此nib正在尝试将出口连接到UITableViewDataSource
实现类而不是DiaryTableViewCell
.有时它就像你在你的xib中创建按钮一样,你创建一个按钮并从一个按钮复制粘贴其他按钮,在这种情况下会发生此错误,是的,从xib删除连接也可能是一个原因 .
我创建了一个类似于你的TableViewCell并且遇到了同样的问题 . 我有研究解决问题,但没有 . 然后我删除TableViewCell中的Label并再次重新创建,通过文件所有者将其连接到TableViewCell,v..v结果是正确的 . 没错 . 你应该重新创建它们 .