什么时候出口绑定到UITableViewCell实例?如果我在调试器中打印myLabel,则为nil并打印:
fatal error: unexpectedly found nil while unwrapping an Optional value
class MyTableViewCell: UITableViewCell {
@IBOutlet var myLabel: UILabel!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
print("\(myLabel)")
}
}
答案 0 :(得分:3)
当调用tableview单元格的init方法时,尚未设置Outlets!
我不确定你的意图是什么:
如果您想确保不打开nil可选值,请使用if let
,如下所示:
if let label = myLabel {
print("\(label)")
}
如果要设置tableView的单元格,则应首先通过调用tableView.registerNib(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "reuse")
来注册单元格。然后使用cellForRowAtIndexPath
在tableView.dequeueReusableCellWithIdentifier("reuse")
中将单元格出列,并确保在awakeFromNib
中设置单元格的值:
override func awakeFromNib() {
super.awakeFromNib()
//you can be sure that myLabel is initialzed here
print("\(myLabel)")
}
答案 1 :(得分:0)
如果要连接主故事板中的插座,如果插座被意外删除,可能会出现问题。重新创建插座,标签将不再为零。
答案 2 :(得分:-1)
问题是你遇到myLabel为零的情况。可能是在表视图单元被回收时。