根据发行说明,Xcode 9 增加了对获取索引的支持:
“数据模型编辑器为 Core Data 的新 fetch 索引功能以及其现有的属性索引和实体复合索引功能提供了一个统一的界面。旧的数据模型被转换为 fetch 索引形式进行编辑,并在必要时保存为旧文件格式. 使用低于 iOS 11、watchOS 4、macOS 10.13 或 tvOS 11 的 Deployment Target 编译数据模型会继续生成兼容的编译表单。(30843153)"
我的项目目前已将部署目标设置为 iOS 9,但我无法编译我的 CoreData 模型,对于每个具有复合索引集的实体,它都会给我以下错误:
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[0]: error: Expression requires a concrete result type.
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[0]: error: Expression attributes are not compatible with the current deployment target.
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[1]: error: Expression requires a concrete result type.
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[1]: error: Expression attributes are not compatible with the current deployment target.
Model.xcdatamodeld/Model.xcdatamodel:MyEntity: error: Fetch Indexes feature requires iOS deployment target 11.0 or later
Model.xcdatamodeld/Model.xcdatamodel:MyEntity: error: Fetch Indexes feature requires Xcode 9.0 tools or later
知道如何修复构建错误吗?
更新:
Xcode 9 正确地将复合索引转换为所有情况下的提取索引,除了那些从关系创建的情况,如“已知问题”部分所述:
数据模型编辑器仅支持从该 beta 中的属性和表达式创建获取索引,而不支持从关系创建获取索引。(32407895)
受影响的提取索引如下所示,可以从下拉菜单中选择唯一的属性:
但是,文档中没有描述解决方法。