下面的代码是上一篇文章的清理和重新散列版本。
参考:This class is not key value coding-compliant for the key...why?
import Foundation
import UIKit
var x = 1
struct DiaryItem {
var title:String?
var subTitle:String?
var leftImage:UIImage?
var rightImage:UIImage?
init(title:String, subTitle:String) {
self.title = title
self.subTitle = subTitle
}
}
class DiaryTableViewCell: UITableViewCell {
@IBOutlet weak var TitleLabel: UILabel!
@IBOutlet weak var SubTitleLabel: UILabel!
@IBOutlet weak var leftImageView: UIImageView!
@IBOutlet weak var rightImageView: UIImageView!
}
class DiaryTableViewController: UITableViewController {
let kCellIdentifier = "DiaryCell"
var diaryCell:DiaryTableViewCell?
var objects = NSMutableArray() //...global var.
override func viewDidLoad() {
self.title = "My Diary"
tableView.registerClass(DiaryTableViewCell.self, forCellReuseIdentifier: kCellIdentifier)
}
// -----------------------------------------------------------------------------------------------------
// MARK: - UITableViewDelegate
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let controller = gStoryboard.instantiateViewControllerWithIdentifier("DiaryPlayerVC") as DiaryPlayerViewController
self.navigationController?.pushViewController(controller, animated: true)
}
// -----------------------------------------------------------------------------------------------------
// MARK: - UITableViewDataSource
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
// -----------------------------------------------------------------------------------------------------
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
// -----------------------------------------------------------------------------------------------------
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as DiaryTableViewCell?
// cell?.selectionStyle = .None
println("\(x++)) Inside cell")
cell!.TitleLabel?.text = "Hello"
cell!.TitleLabel?.backgroundColor = UIColor.blueColor()
cell!.SubTitleLabel?.text = "World"
cell!.contentView.backgroundColor = UIColor.redColor()
return cell!
}
...
}我要拿到细胞,但没有细胞的成分。
1) Inside cell
(lldb) po cell!.TitleLabel
nil




我清理了代码,它可以正常编译和运行。该单元格已加载并被涂成红色,因此我可以看到它已加载。但是没有一个单元格的内容是实例化的。
为什么?
它现在看到了细胞的成员..。
但现在我得到了:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7f9691594810> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key leftImageView.'
如果我断开插座,我会得到图像:

我已经添加了所需的init(),但仍然有相同的问题:
class DiaryTableViewCell: UITableViewCell {
@IBOutlet weak var leftImageView: UIImageView!
@IBOutlet weak var rightImageView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var subTitleLabel: UILabel!
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSLog("init coder")
}
}发布于 2014-11-04 20:11:13
您已经将您的属性声明为隐式未包装的可选参数,并在您的签名中确认它们不为空。因此,不需要使用可选链接。
请使用小写的属性名称,因为类名称使用大写名称:
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 tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as? DiaryTableViewCell {
// cell.selectionStyle = .None
println("\(x++)) Inside cell")
cell.titleLabel.text = "Hello"
cell.titleLabel.backgroundColor = UIColor.blueColor()
cell.subTitleLabel.text = "World"
cell.contentView.backgroundColor = UIColor.redColor()
return cell
}
return UITableViewCell()
} 如果它崩溃了,一定是你的出口绑定出了问题。
您是否在InterfaceBuilder中将DiaryTableViewCell设置为nib的类?
发布于 2014-11-04 21:25:45
您的tableCellClass缺少用于nib的awakeFromNib()方法:
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 awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}发布于 2014-11-05 03:43:24
我找到了解决方案:
This class is not key value coding-compliant for the key...why?
这是转帖:
我将UI元素链接到了错误的来源:

结果如下:

https://stackoverflow.com/questions/26733848
复制相似问题