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 indownloadImage
wird 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
akzeptierenindexPath
wird 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?