En iOS, ¿cómo hacer que un cell.imageView actualice su contenido?
Estoy experimentando entableView:cellForRowAtIndexPath
para establecer una imagen llamando
[self downloadImage:urlString andSetIntoCellImageView:cell]
y endownloadImage
llamaráNSURLConnection:sendAsynchronousRequest
(Solo iOS 5 y superior), y en el bloque de finalización, configure la imagen utilizando
cell.imageView.image = [UIImage imageWithData:data]; // data is downloaded data
y funciona si entableView:cellForRowAtIndexPath
, laimageView
se rellena con una imagen de marcador de posición ficticia, y me pregunto cómo se actualizará la nueva imagen, ¿es así?setNeedsDisplay
hacer un repintado? Pero si no configuro la imagen del marcador de posición, la nueva imagen no se mostrará en absoluto. Me pregunto qué mecanismo se puede usar para hacer que muestre la imagen.
Si yo uso
[cell.imageView setNeedsDisplay]
o
[cell setNeedsDisplay];
en el bloque de finalización, no funcionará, y si uso
[self.table reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
en el bloque de finalización haciendodownloadImage
acepta elindexPath
llamarátableView:cellForRowAtIndexPath
de nuevo, y provocar un bucle infinito. Así que parece que necesito usar alguna tabla hash para recordar si la imagen ya está en la tabla hash: si no, llamadownloadImage
, y si está en la tabla hash, simplemente úselo, para que no haya un bucle infinito.
¿Pero hay una manera fácil de hacer que la imagen se muestre? La configuración de una imagen de marcador de posición funciona, pero ¿qué sucede si no lo hacemos? ¿Con qué mecanismo hace que el marcador de posición cause la actualización de la imagen?