我有一个 Cocoa Mac 应用程序,其中有一个搜索字段和一个通过 CoreData 绑定(bind)到 sqlite 表的 Collection View 。该表包含数十万条记录,其中文本字段(名称、地点等)按名称索引。我在搜索字段绑定(bind)中使用 BEGINSWITH 谓词来选择要在 Collection View 中显示的十几条记录。一切工作正常,但问题是 CoreData 在第一个查询请求时将整个表加载到内存中,然后才对显示的记录进行必要的过滤,这对用户来说意味着相当大的延迟。
有没有办法设置 CoreData 以便整个表不会加载到内存中?理想情况下,我只想为搜索字段中的每个查询从一系列按字母顺序排序的记录中获取前 100 项。
最佳答案
在 iOS 上,这可以使用 NSFetchedResultsController
来实现。以下问题描述了 Mac 等效 Controller (例如 NSArrayController
): NSFetchedResultsController Mac OSX Cocoa equivalent .
编辑
根据我下面的评论,应与数组 Controller 一起创建 NSFetchRequest
。然后可以使用 fetchLimit
和 fetchOffset
进行配置,以确定返回多少个提取结果。
关于cocoa - CoreData 和大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857184/