核心数据:未在子实体上创建复合索引

Core Data: Compound Indexes are not getting created on a child entity

情况是这样的:我有一个父子 Core Data 模型关系。我在子实体上有一些字段,我通过在获取请求上使用排序描述符来排序。我已将它们添加到数据模型检查器实体部分的索引列表中,例如 field1、field2。

但是,当设置-com.apple.CoreData.SQLDebug 1 时,我看不到正在创建的复合索引。此外,我能够得到 SQLite 生成的文件,我能看到的只是为其他目的创建的单个字段索引,而不是复合索引。

对子实体执行此操作是否有限制?有没有人在子实体上创建复合索引?谢谢!

好吧,我最终从头开始创建了一个简单的核心数据项目,其中只有一个父实体和一个子实体,只是为了看看当我在核心数据模型中选择和取消选择父实体作为子实体的父实体时发生了什么。

通过使用 -com.apple.CoreData.SQLDebug 1 我能够看到仅当子实体没有父实体作为父实体时才创建复合索引。

顺便说一句,我是 运行 iOS 8.3。

附带说明一下,我调试了 Core Data 代码,似乎正在调用私有 class NSSQLConnectioncreateIndexesForEntity: 方法。但是,在方法代码的最开始,它调用了另一个私有classNSSQLEntity的方法isRootEntity。当 returns NO 时,它会跳过方法代码和 returns 什么都不做。

此功能对我来说非常重要,以至于我最终从项目的核心数据模型中存在的所有实体中删除了父实体设置。