【发布时间】:2014-07-13 09:34:42
【问题描述】:
我正在尝试在集合视图中显示来自 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;
这工作得更快,结果看起来不错。
问题:
- 这是一个正确的解决方案吗?我有没有弄坏什么东西?
- 有更好的解决方案吗?
【问题讨论】:
-
对我来说看起来不错。您可以在 github.com/AshFurrow/… 上提出问题并提出您的解决方案。
标签: objective-c core-data uicollectionview nsfetchedresultscontroller