cocoa - CoreData 和大表

标签 cocoa sqlite core-data

我有一个 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。然后可以使用 fetchLimitfetchOffset 进行配置,以确定返回多少个提取结果。

关于cocoa - CoreData 和大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857184/

相关文章:

objective-c - 以编程方式在显示器之间移动 Mac 菜单栏

objective-c - 如何刷新取景器窗口?

objective-c - 具有核心数据和表格 View 的 Apple 模板 iOS 文件

iphone - 创建数据库后无法执行FetchRequest

cocoa - 管理调试和发布版本之间的 NSStoreType 更改

Cocoa/CoreGraphics/Quartz - 无边框 Quicktime X 窗口,具有圆边

objective-c - 用另一个 View 替换 View 时保持约束

go - 从 UnixNano() 到时间{}

sql - 选择给定时间间隔的行

java - SQLite + 可序列化、SQLite + GSON,还是只是适用于我的 Android 应用程序的普通 SQLite?