我有一个带有搜索字段的Cocoa Mac应用程序和一个通过CoreData绑定到sqlite表的集合视图。该表包含数十万条记录,其中包含按名称索引的文本字段(名称,地点......)。我在搜索字段绑定中使用BEGINSWITH谓词来选择要在集合视图中显示的十几条记录。一切正常,但问题是CoreData在第一个查询请求时将整个表加载到内存中,然后才对显示进行必要的记录过滤,这意味着用户会有相当大的延迟。
有没有办法设置CoreData,以便整个表不会加载到内存中?理想情况下,我想从搜索字段中每个查询的一系列按字母顺序排序的记录中获取前100个项目。
答案 0 :(得分:2)
在iOS上,这可以使用NSFetchedResultsController
来实现。以下问题描述了Mac等效控制器(例如NSArrayController
):NSFetchedResultsController Mac OSX Cocoa equivalent。
修改强>
根据我在下面的评论,应该与阵列控制器一起创建NSFetchRequest
。然后可以使用fetchLimit
和fetchOffset
对其进行配置,以确定返回的提取结果数。
答案 1 :(得分:0)
确保将获取请求设置为仅作为故障获取。这样,只有主动访问其属性的对象才会完全加载到内存中。