解决 Field 'recordName' is not marked queryable 错误

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

解决 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 中通过编程的方式也可以正常查询。