2016-03-30 8 views
0

dequeueReusableCellWithIdentifierでインスタンス化した直後に、カスタムUITableViewCellのコンセントにアクセスするのが保存されますか?`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() 
    } 
} 

私はmyImageView.image = image行目に指してクラッシュレポートを取得し、この実装をたくさん使用していないが、非常に稀に(< 0.001%)しています。

UPDATE: これまでのところクラッシュが唯一の彼らは同じクラスを共有するため、1口がカスタムセル内の多くのUIImageView()にリンクされている一つの特定の実装のために観察されています。

答えて

2

簡易メソッドdequeueReusableCellWithIdentifier:は、安全でないオプションの値を返します。

使用し、それはむしろUIImageViewオブジェクトのimageプロパティがnilすることができるので、(?)オプションとして関連UIImageプロパティを宣言することをお勧めします

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

非オプションのセルを返すために安全である代わりに、この方法デフォルトの初期化子(())を持たない暗黙のアンラッピングされたオプション(!

+0

これを指摘してくれてありがとう、私はコードを更新します。しかし、セルに対してnilを返すと、クラッシュは 'myImageView.image = image'の代わりに' cell.image = UIImage(...) '行で起こると思います。 – Manuel

+0

私の悪い、プロパティは、オプションとして宣言され、誤植を修正しました。 – Manuel

関連する問題