CKFetchRecordsOperation 从不 returns 任何键

CKFetchRecordsOperation never returns any keys

我的 public(开发)数据库中有一条记录,其中有几个填充字段。当我使用 CKFetchRecordsOperation 获取该记录时,获取成功,但生成的 CKRecord 始终不包含键。无论我在获取操作中明确设置 desiredKeys 还是将其保留为 nil,都会发生这种情况。记录和它的键已经很长时间没有改变,所以它不是传播延迟。

public 数据库中只有一条记录,它的 ID 与我得到的匹配,所以我确定正在提取正确的记录;它只是从来没有任何钥匙。例如,下面的代码总是打印 keys: [].

let op = CKFetchRecordsOperation(recordIDs:[...])
op.desiredKeys = [...] // commenting this has no effect
op.fetchRecordsCompletionBlock = {records, error in
    if let e = error {
        print("error:", e)}
    for (id, r) in records ?? [:] {
        print("keys:", r.allKeys())}}
db.addOperation(op)

我也尝试过通过下标符号访问各个键,但它们总是 nil。在这一点上我不知所措。没有错误,正在查找我要的记录,为什么一直没有key?

更新:我注意到 CloudKit 仪表板总是在左下角显示 "Reindexing development",甚至在我上次更改几天后也是如此。此外,我尝试创建第二条记录(通过仪表板),但在留出足够的传播时间后,我的提取甚至找不到它。

根据 this SO question to an Apple developer forum thread 的 link 关于这个问题,我发现一个 post 表明它只发生在有资产字段的记录上。我会在有时间的时候尝试试验,尽管在这种情况下我无法避免使用资产,所以它可能没有太大帮助。

更新 2: 我尝试重置我的开发环境,然后重新创建与以前相同的记录。从好的方面来说,CloudKit 仪表板中的 "Reindexing" 消息终于消失了。不幸的是,我的代码现在无法找到我的 任何 记录,即使代码保持不变并且我已经对所有内容进行了三重检查。

我也尝试创建一个没有 Asset 字段的记录类型(见上面的第一次更新),但它似乎没有任何改变。

原来我是在查询私有数据库,而我想要的记录在 public 中。