No iOS, como fazer um cell.imageView atualizar seu conteúdo?
Eu estou experimentando emtableView:cellForRowAtIndexPath
para definir uma imagem chamando
[self downloadImage:urlString andSetIntoCellImageView:cell]
e emdownloadImage
, vai ligarNSURLConnection:sendAsynchronousRequest
(iOS 5 e superior apenas) e no bloco de conclusão, defina a imagem usando
cell.imageView.image = [UIImage imageWithData:data]; // data is downloaded data
e funciona se emtableView:cellForRowAtIndexPath
, aimageView
é preenchido com uma imagem de espaço reservado fictícia - e eu me pergunto como a nova imagem é atualizada, é porsetNeedsDisplay
fazer uma repintura? Mas se eu não definir a imagem do espaço reservado, a nova imagem não será exibida. Gostaria de saber qual mecanismo pode ser usado para mostrar a imagem?
Se eu usar
[cell.imageView setNeedsDisplay]
ou
[cell setNeedsDisplay];
no bloco de conclusão, não vai funcionar, e se eu usar
[self.table reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
no bloco de conclusão, fazendodownloadImage
aceita aindexPath
, vai ligartableView:cellForRowAtIndexPath
novamente, e causar um loop infinito. Então, parece que eu preciso usar alguma tabela de hash para lembrar se a imagem já está na tabela de hash: se não, ligue paradownloadImage
, e se na tabela de hash, simplesmente usá-lo, então não haverá loop infinito.
Mas há uma maneira fácil de fazer com que a imagem apareça? A definição de uma imagem de placeholder funciona, mas e se não o fizermos - por qual mecanismo o placeholder causa a atualização da imagem?