我试图在集合视图中显示CoreData中的数据。我尝试了AshFurrow's code和其他变体,以反映NSFetchedResultsController
观察到的数据对集合视图的更改。它似乎有效。
问题是我在后台处理相当繁重的数据,包括添加新项目,添加部分,删除部分甚至合并部分。这会导致UI的显着延迟,滚动。我注意到大部分时间花在更新已更改的集合视图项上:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.collectionView performBatchUpdates:^{
....
case NSFetchedResultsChangeUpdate:
[self.collectionView reloadItemsAtIndexPaths:@[indexPath]];
break;
....
}];
}
此代码似乎重新加载甚至无法显示的项目。所以我把它改成了:
case NSFetchedResultsChangeUpdate:
if ([[self.collectionView indexPathsForVisibleItems] containsObject:indexPath])
[self.collectionView reloadItemsAtIndexPaths:@[indexPath]];
break;
这个工作得更快,结果看起来很好。
问题:
答案 0 :(得分:0)
您可以通过在中执行重新加载来限制对相关索引路径的更新
controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
而不是controllerDidChangeContent: