簡體   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