为什么我会为UITableViewCell的UILabel获得nil?

时间:2014-11-04 03:33:44

标签: swift uilabel null tableviewcell

为什么我会得到一个' nil'在第二次通过表格单元格列表迭代期间出错/ UILabel?

1) Inside cell
2) Inside cell
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) po cell?.contentView.viewWithTag(TitleLabelTag)
nil

enter image description here

enter image description here

在这里,我链接代码中的元素;并注册单元格:

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 cellNib:UINib?
    var diaryCell:DiaryTableViewCell?
    var objects = NSMutableArray()  //...global var.

    override func viewDidLoad() {
        self.title = "My Diary"
        cellNib = UINib(nibName: "TableViewCells", bundle: nil)
        tableView.registerClass(DiaryTableViewCell.self, forCellReuseIdentifier: kCellIdentifier)
    }
    ...

然而,我在这里得到了运行时错误:

enter image description here

这是我在控制台中得到的内容:

1) Inside cell
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) po cell!.TitleLabel
nil

这里缺少什么?

3 个答案:

答案 0 :(得分:0)

选择带有标签的视图是一个非常糟糕的主意。将UITableViewCell子类化并为其提供访问元素的属性是一个更好的主意。

答案 1 :(得分:0)

如果要创建静态单元格并加载,则需要在.h中正确创建一个IBoutlet。

此外删除行

您的代码中的tableView.registerClass(...)语句。看看这个链接可能有帮助,除了它的collectionview之外非常相似。 -

Why is UICollectionViewCell's outlet nil?

答案 2 :(得分:0)

1)我将单元格注册移动到viewDidLoad()。
2)我忘了放置'?'在TitleLabel& SubTitleLabel;通知编译器这些标签可能是零。

enter image description here

我还没有看到改变过的细胞(空行);但我没有收到运行时错误。

不幸的是,我只是治愈了症状;不是原因。我还是没有UIL用户。
......致力于修订和清洁代码。