2016-03-30 6 views
0

Ist es sicher, direkt nach dem Instanziieren mit dequeueReusableCellWithIdentifier auf einen Ausgang eines benutzerdefinierten UITableViewCell zuzugreifen?Wird eine UITableViewCell und ihre Ausgänge nach `dequeueReusableCellWithIdentifier` initialisiert?

z.

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() 
    } 
} 

Ich habe diese Implementierung viel verwendet, aber sehr selten (< 0,001%) ich einen Crash-Bericht verweisen, erhalten myImageView.image = image auszukleiden.

UPDATE: Bisher ist die Abstürze nur für eine bestimmte Implementierung beobachtet worden, wo ein Auslass zu vielen UIImageView() in individuellen Zellen verbunden ist, weil sie die gleiche Klasse teilen.

Antwort

2

Die einfache Methode dequeueReusableCellWithIdentifier: gibt eine optionale zurück, die nicht sicher ist. stattdessen

Verwenden Sie diese Methode, die sicher ist, weil es sich um eine nicht-optionalen Zelle zurückgibt

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

Da die image Eigenschaft eines UIImageView Objekt nil sein kann, es wird empfohlen, um einige der anderen UIImage Eigenschaften als optional zu deklarieren (?) eher als implizit unwrapped optional (!) ohne den Standard-Initialisierer (())

+0

Vielen Dank für das Aufzeigen, ich werde den Code aktualisieren. Wenn es jedoch für die Zelle nil zurückgibt, dann würde der Absturz wahrscheinlich in der Zeile 'cell.image = UIImage (...)' anstatt in 'myImageView.image = image' erfolgen. – Manuel

+0

Mein Fehler, die Eigenschaft wird als optional deklariert, korrigiert den Tippfehler. – Manuel

Verwandte Themen