UITableViewCell出口

时间:2016-03-29 17:59:08

标签: ios swift uitableview

什么时候出口绑定到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)")
 }
}

3 个答案:

答案 0 :(得分:3)

当调用tableview单元格的init方法时,尚未设置Outlets!

我不确定你的意图是什么:

  1. 如果您想确保不打开nil可选值,请使用if let,如下所示:

    if let label = myLabel {
       print("\(label)")
    }
    
  2. 如果要设置tableView的单元格,则应首先通过调用tableView.registerNib(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "reuse")来注册单元格。然后使用cellForRowAtIndexPathtableView.dequeueReusableCellWithIdentifier("reuse")中将单元格出列,并确保在awakeFromNib中设置单元格的值:

    override func awakeFromNib() {
       super.awakeFromNib()
    
       //you can be sure that myLabel is initialzed here
       print("\(myLabel)") 
    }
    

答案 1 :(得分:0)

如果要连接主故事板中的插座,如果插座被意外删除,可能会出现问题。重新创建插座,标签将不再为零。

答案 2 :(得分:-1)

问题是你遇到myLabel为零的情况。可能是在表视图单元被回收时。