這就是問題所在:我在保存並將縮略圖提取到Core Data後更新我的tableview,然後告訴單元更新自身 - 因此它可以在圖像加載到時顯示縮略圖核心數據。我使用兩個不同的線程作爲核心數據不是線程安全的,當然所有的GUI元素都需要在主線程中發生。iOS:更新tableViewCell無限循環
但是這整個方法只是永遠保持循環,並是什麼原因造成的,當我重新加載線程:
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
爲什麼?我該如何解決這個問題?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Photo"];
Photo *photo = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = photo.title;
cell.detailTextLabel.text = photo.subtitle;
NSLog(@"Context %@", self.photographer.managedObjectContext);
[self.photographer.managedObjectContext performBlock:^{
[Photo setThumbnailForPhoto:photo];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = [UIImage imageWithData:photo.thumbnail];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
});
}];
return cell;
}
不要,我再說一遍,不要在cellforrowatindexpath內調用重載表(cell)函數..因爲它會一遍又一遍地讀取圖像。當你重新加載tableview或任何單元格時,它會再次調用cellforrowatindexpath(並且在你的情況下再次調用) – 2013-03-20 15:13:43
cellForRowAtIndexPath將在繪製單元格之前調用。所以它已經更新了。爲什麼你需要在cellForRowAtIndexPath中重新加載? – Mert 2013-03-20 15:15:28
Mert:我只是應該重新加載它,因爲我直接訪問了tableViewCell。 – 2013-03-20 15:22:04