W systemie iOS, jak zrobić cell.imageView odświeżyć jego zawartość?
Eksperymentuję wtableView:cellForRowAtIndexPath
ustawić obraz, dzwoniąc
[self downloadImage:urlString andSetIntoCellImageView:cell]
i wdownloadImage
, zadzwoniNSURLConnection:sendAsynchronousRequest
(tylko iOS 5 i nowsze) iw bloku zakończenia ustaw obraz za pomocą
cell.imageView.image = [UIImage imageWithData:data]; // data is downloaded data
i działa, jeśli jesttableView:cellForRowAtIndexPath
, theimageView
jest wypełniony obojętnym obrazem zastępczym - i zastanawiam się, jak odświeżony jest nowy obrazsetNeedsDisplay
zrobić odmalowanie? Ale jeśli nie ustawię obrazu zastępczego, nowy obraz w ogóle się nie pokaże. Zastanawiam się, jaki mechanizm można wykorzystać do pokazania obrazu?
Jeśli używam
[cell.imageView setNeedsDisplay]
lub
[cell setNeedsDisplay];
w bloku ukończenia nie będzie działać i jeśli użyję
[self.table reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
w bloku ukończenia, wykonującdownloadImage
ZaakceptujindexPath
, zadzwonitableView:cellForRowAtIndexPath
ponownie i spowodować nieskończoną pętlę. Wydaje się więc, że muszę użyć pewnej tablicy mieszania, aby zapamiętać, czy obraz jest już w tablicy mieszania: jeśli nie, wywołajdownloadImage
, a jeśli w tablicy mieszającej, po prostu użyj go, więc nie będzie nieskończonej pętli.
Ale czy istnieje łatwy sposób na wyświetlenie obrazu? Ustawienie obrazu zastępczego działa, ale jeśli tego nie zrobimy - jakim mechanizmem zastępczym powoduje odświeżenie obrazu?