繁体   English   中英

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

[英]Is a UITableViewCell and its outlets initialized after `dequeueReusableCellWithIdentifier`?

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

例如

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

更新:到目前为止,仅在一种特定的实现中观察到了崩溃,其中一个插座链接到自定义单元格中的许多UIImageView() ,因为它们共享同一类。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM