ios - Core Data 中如何有效处理大数据集?

标签 ios uitableview core-data nsfetchedresultscontroller

我在我的应用程序中使用核心数据来存储可能包含多达 50k 个或更多对象的实体。我将其与 TableView 中的 NSFetchedResultsController 配对。由于单元格重用, TableView 工作正常,但我最大的问题是查询实际数据库以获取数据集。

当我第一次加载 TableView 时,我需要来自数据库的所有结果。我正在使用带有单个排序描述符的默认获取请求,并将 batchSize 设置为 1,000。在 iPad 2 上,此查询最多需要 15 秒 才能完成!我还必须在取消搜索后运行此查询,因此总的来说这会使应用程序无法使用。我的假设是 CD 仍然必须解决所有这些结果或设置部分或其他东西,我真的不知道但只使用 batchSize 没有帮助?从总是添加新行、更改排序顺序等的意义上讲,内容也非常动态。因此缓存的好处有限。

我现在认为最好的选择是在 fetchRequest 中使用 fetchLimit,然后实现一些基本的分页。当 TableView 滚动到末尾时获取下一个“页面”结果?这种方法的唯一问题是我丢失了 sectionIndex,我想不出任何解决方法。

有人有任何想法或已经处理过这个问题吗?

最佳答案

当您为 FRC 设置获取请求时,批处理大小应该比屏幕上任何时候可以看到的项目数量大几项,可能是其两倍。 FRC 已经为你做了分页,你只需要更好地设置页面大小。

关于ios - Core Data 中如何有效处理大数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705578/

相关文章:

ios - 使用 segue 中的参数调用函数

ios - 当 App 退出并重新启动时,NSManagedObjectContext 不会保存

swift - 如何在 iOS 的核心数据或 Realm 中动态保存数组以及如何比较这个数组

ios - 在 Swift 中调用绘图函数

ios - 使 UICollectionViewFlowLayout 不在同一行上居中单元格

ios - Swift - 按范围对数组元素进行排序

objective-c - 为什么在发送 NSFetchedResultsChangeDelete 事件的核心数据中更改记录?

ios - 应用程序在后台时的连接状态和通过XMPP的处理

ios - 在 Swift 的 TableView 中填充数据时出现问题

ios - 如何将背景图像添加到在 iOS 中动态创建的 UItable 单元格