只是为了排除显而易见的问题,我正在从主线程更新UI,并且我已经阅读了一堆类似的问题。可悲的是,他们都没有帮助。UITableView单元有时无法更新图像,但滚动后显示正常
简而言之:应用程序会尝试从当地缓存中获取当前单元格的图像。如果失败,它会启动后台线程来下载图像,然后从主线程更新UI。这在90%的时间内工作。否则,单元格中的imageView
保持空白。有趣的是,这总是发生在相同的图像。
但是,只要单元格滚动出视图并返回到视图中,图像就会立即更新。
在立即显示的图像和不显示的图像之间似乎没有显着差异。
我也尝试用setNeedsDisplay
更新单元格,但那也行不通。什么工作,但除了有点笨手笨脚,动画我的动画是[tableView reloadData]
。
// tableView:cellForRowAtIndexPath:
if(!pic) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// download image, add it to the cache etc.
dispatch_async(dispatch_get_main_queue(), ^{
// check if cell is visible
if ([[tableView visibleCells] containsObject: theCell]) {
[[theCell imageView] setImage:pict];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:idxp] withRowAnimation:UITableViewRowAnimationAutomatic];
}
});
});
}
在调用'reloadRowsAtIndexPaths:'的地方,任何机会'idxp'与'indexPathForCell:theCell'都不相同? – 2012-04-01 16:03:29
没有。它们是相同的。而'[setCellSetDisplayDisplay]'也不起作用。 – dandan78 2012-04-01 17:01:55