解决 Field 'recordName' is not marked queryable 错误
了解如何修复在 CloudKit 中 Query 时出现的 Field 'recordName' is not marked queryable 错误。

默认不可查询
默认情况下,出于资源消耗的考虑,CloudKit Database 中所有字段均不可查询(因为需要预先建立索引)。
无论是在 CloudKit Console 网页端,还是在 Xcode 中通过编程的方法查询数据,都会出现 Field 'recordName' is not marked queryable
报错:


开发者需要明确指定需要查询的字段,然后才能进行 Query。
设置索引
在 CloudKit Console 网页端,找到 Schema -> Record Types。
选择需要查询的表,然后点击 Edit Indexes:

点击右上角的+,Add Index:

按照如下方式填写:
- Record Type:选择需要查询的表
- Name:任何名字都可以,主要用于自己看。例如
recordName(queryable)
- Type:选择
QUERYABLE
- Field:选择
recordName

点击 Add 保存。

这就是我们新添加的 Index 记录,不清楚为什么名称和我们指定的不一致。
测试 Queryable 生效
在 Data -> Records 中进行查询时,必须选择 Private Database 和正确的 Zone:

现在点击 Query Records,可以正确查询到数据。在 Xcode 中通过编程的方式也可以正常查询。