在`dequeueReusableCellWithIdentifier`之后是否初始化了UITableViewCell及其出口?

时间:2016-03-30 13:17:47

标签: ios swift uitableview iboutlet

使用UITableViewCell实例化后,是否可以保存以访问自定义dequeueReusableCellWithIdentifier的插座?

E.g。

class MyCell: UITableViewCell {

    @IBOutlet weak var myImageView: UIImageView!
    var image: UIImage?

    override func awakeFromNib() {
        update()
    }        

    func update() {
        myImageView.image = image
    }
}

class MyViewController: UIView() {
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("MyCellIdentifier") as! MyCell
        cell.image = UIImage(...)
        cell.update()
    }
}

我已经很多地使用了这个实现,但很少(<0.001%)我得到一个指向行myImageView.image = image的崩溃报告。

更新 到目前为止,仅针对一个特定实现观察到崩溃,其中1个出口链接到自定义单元格中的许多UIImageView(),因为它们共享相同的类。

1 个答案:

答案 0 :(得分:2)

简单方法dequeueReusableCellWithIdentifier:返回一个不安全的可选方法。

使用此方法,这是安全的,因为它返回一个非可选的单元格

let cell = tableView.dequeueReusableCellWithIdentifier("MyCellIdentifier",
           forIndexPath: indexPath) as! MyCell

由于image对象的UIImageView属性可以是nil,因此建议将相关的UIImage属性声明为可选(?)而不是隐式展开没有默认初始值设定项(!

的可选(()