objective-c - 如何使用 SQLite 存储在 Core Data 中查询未保存的数据?

标签 objective-c sqlite core-data

在发送托管对象上下文save:消息之前,对托管对象所做的修改仅保存在内存中,不会提交到数据库。那么它如何对数据库执行查询呢?它必须执行标准的 SQL 查询,然后查询未保存的对象并合并结果,这应该非常慢。

更新: 例如,我有文章 <-> 标签多对多关系,并且有许多未保存的文章。然后我想找到具有某些标签或某些日期之间的所有文章。在数据库中,这将是对我们的关系表或日期字段的查询,并将使用适当的索引。但是对于未保存的对象,它必须迭代所有未保存的文章和/或其标签?或者对于未保存的对象,它也有一些类似数据库的存储?

最佳答案

默认情况下,当您执行提取时,Core Data 不会查询挂起的更改 - 您需要使用提取请求的 setIncludesPendingChanges 属性显式设置此设置。

假设您已启用此功能:我不确定为什么您认为查询未保存的更改会变慢。

如果您的 Core Data 实例由 SQLite 存储支持,那么您需要从持久存储(磁盘)读取数据库。您未保存的对象仍将位于 RAM 中 - 访问这些未保存的对象比访问数据库中的对象要快得多。您可以并行执行这两个查询,然后合并结果 - 合并数组很简单 - 这意味着几乎没有性能损失。

总会有异常(exception)和边缘情况,但一般来说,不应该有明显的性能损失。

关于objective-c - 如何使用 SQLite 存储在 Core Data 中查询未保存的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866865/

相关文章:

database - 为 SQLite 编写的 SQL 是否可以与为 Access 数据库编写的 SQL 互换?

ios - 核心数据中的计算属性

objective-c - iOS 6 从地址簿中读取 Facebook 用户名 ID

iphone - 从 UIPicker 中的 plist 字典中对数据进行数字排序

mysql - 如何配置 Rails 以在表单字段中以正确的精度输出小数?

java - 使用PreparedStatement的SQLite函数

ios - 以编程方式创建对象并更改该对象的位置

iphone - 加载前 View 已删除

swift - 在 swift 3 中创建复杂的 NSCompoundPredicate

ios - 核心数据+iCloud :iCloud Storage only increase not decrease