Wie kann ein cell.imageView unter iOS dazu gebracht werden, seinen Inhalt zu aktualisieren?

Ich experimentiere intableView:cellForRowAtIndexPath um ein Bild durch einen Anruf zu setzen

[self downloadImage:urlString andSetIntoCellImageView:cell]

und indownloadImagewird es anrufenNSURLConnection:sendAsynchronousRequest (nur iOS 5 und höher) und stellen Sie das Bild im Vervollständigungsblock mit ein

cell.imageView.image = [UIImage imageWithData:data];   // data is downloaded data

und es funktioniert wenn intableView:cellForRowAtIndexPath, dasimageView ist mit einem Platzhalter-Dummy-Bild gefüllt - und ich frage mich, wie das neue Bild aktualisiert wirdsetNeedsDisplay ein Repaint machen? Wenn ich das Platzhalterbild jedoch nicht festlege, wird das neue Bild überhaupt nicht angezeigt. Ich frage mich, mit welchem ​​Mechanismus das Bild angezeigt werden kann.

Wenn ich benutze

[cell.imageView setNeedsDisplay]

oder

[cell setNeedsDisplay];

im vervollständigungsblock klappt es nicht und wenn ich benutze

[self.table reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                            withRowAnimation:UITableViewRowAnimationAutomatic];

im Vervollständigungsblock durch machendownloadImage akzeptierenindexPathwird es anrufentableView:cellForRowAtIndexPath wieder und verursachen eine Endlosschleife. Es scheint also, als müsste ich eine Hash-Tabelle verwenden, um mich daran zu erinnern, ob sich das Bild bereits in der Hash-Tabelle befindet. Wenn nicht, rufen Sie aufdownloadImage, und wenn in der Hash-Tabelle, verwenden Sie es einfach, so wird es keine Endlosschleife geben.

Aber gibt es eine einfache Möglichkeit, das Bild anzuzeigen? Das Setzen eines Platzhalterbildes funktioniert, aber was ist, wenn dies nicht der Fall ist - durch welchen Mechanismus wird das Bild durch Platzhalter aktualisiert?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage