7

根据发行说明,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)

受影响的提取索引如下所示,可以从下拉菜单中选择唯一的属性:

在此处输入图像描述

但是,文档中没有描述解决方法。

4

4 回答 4

3

我刚刚在 Xcode 9 GM 中遇到了这个问题。我观察到的是,取消选中Ascending索引编辑器中的复选框会导致发生此错误(它仅在我创建新索引后才出现)。我假设仅在 iOS 11 获取索引中支持调整此索引属性(您会注意到您在 Xcode 9 之前创建的任何索引都默认列为升序)。

TL;DR:确保Ascending在获取索引编辑器中选中所有属性的复选框。

于 2017-09-14T23:12:32.430 回答
0

我已经向 Apple 提交了一个错误 - 因为似乎没有一个好的修复。目前,我已将“工具版本”从 Automatic/Xcode 9 更改为 Xcode 8。这解决了我的问题,直到错误得到修复。

某些模型也可能与新索引不兼容。在我的例子中,它是与其他类型有关系的子类模型(即来自抽象类)。例如:

PIFolder
|
|-----PIFolderProject -> index: defaultItem (task relationship)
|-----PIFolderNotebook-> index: defaultItem (note relationship)
于 2017-09-07T17:01:02.850 回答
0

我得到后来到这里

cdtool[0] 实体已经有一个带有名称的索引

在尝试将基本目标升级到 iOS 11 时。

经过几天的反复试验,修复方法是使用唯一名称重命名索引

在 iOS 11 之前,索引名称不是唯一的,所以我有 2 个byRankIndex。将它们更改为唯一名称修复了它。

于 2020-11-11T10:48:37.487 回答
0

根据发行说明,这在 Xcode 9 beta 2 中已修复:

Xcode 数据模型编辑器支持从属性、表达式和关系创建获取索引。(32407895)

于 2017-06-22T12:22:50.583 回答