只是爲了排除顯而易見的問題,我正在從主線程更新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