CKFetchRecordsOperation永远不会返回任何键

时间:2016-02-09 14:49:35

标签: swift cloudkit

我的公共(开发)数据库中有一条记录,有几个填充字段。当我使用CKFetchRecordsOperation获取该记录时,获取成功,但结果CKRecord始终不包含任何键。无论我是在我的fetch操作中明确设置desiredKeys还是将其保留为nil,都会发生这种情况。记录及其密钥长期保持不变,因此不是传播延迟。

公共数据库中只有一条记录,其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。我此刻不知所措。没有错误,我想要的记录被发现,为什么没有任何密钥?

更新:我注意到CloudKit信息中心总是说"重新编制索引开发"在左下角,即使在我最后一次更改后的几天。此外,我尝试创建第二条记录(通过仪表板),并且在留出足够的时间进行传播后,我的提取甚至无法找到它。

this SO questionApple developer forum thread之间关于此问题的链接后,我发现一个帖子表明它只发生在包含资源字段的记录中。我会在有空的时候尝试尝试,虽然在这种情况下我不能避免使用资产,所以它可能没什么帮助。

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

我还尝试创建一个没有Asset字段的记录类型(请参阅上面的第一个更新),但它似乎没有改变任何内容。

1 个答案:

答案 0 :(得分:0)

当我想要的记录属于公共记录时,我正在查询私人数据库。