无法使用 CloudKit 获取 sharedCloudDatabase 自定义区域中的记录

Posted

技术标签:

【中文标题】无法使用 CloudKit 获取 sharedCloudDatabase 自定义区域中的记录【英文标题】:Unable to fetch records in a sharedCloudDatabase custom Zone using CloudKit 【发布时间】:2019-05-16 07:29:48 【问题描述】:

我正在尝试从共享数据库中的自定义区域获取 CloudKit 记录。

在共享过程中已正确创建区域。所以我假设该区域是正确的共享自定义区域(它确实在我的 CloudKit 用户仪表板中,出现在默认容器的 sharedDatabase 下)。

即使使用这段简单的代码来检索记录:

func loadRecords() 
    let database = CKContainer.default().sharedCloudDatabase
    let query = CKQuery(recordType: "Items", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
    let operation = CKQueryOperation(query: query)
    let zone = CKRecordZone(zoneName: "MyCustomZone")
    var fetchedRecords: [CKRecord] = []

    database.perform(query, inZoneWith: zone.zoneID)  (records, error) in
        if let error = error 
            print(error)
        
        else if let records = records, let firstRecord = records.first 
            print(firstRecord)
        
    

我不断收到此错误:(抱歉在之前的帖子中遗漏了!)

<CKError 0x280950840: "Invalid Arguments" (12/1009); "Only shared zones can be accessed in the shared DB">

知道我缺少什么吗?谢谢!

【问题讨论】:

哪个错误? (缺失) 抱歉,跳过了……现在更新了。 也许this post 可以解决您的问题? 很遗憾没有。我确实在共享之前将记录保存在私人用户数据库中。所以记录保存在私有数据库中,然后我共享它,共享导致在接受共享的用户的共享数据库中生成“窗口”。这确实让我感到困惑……shareDB 中的区域确实应该是共享的! 【参考方案1】:

好吧,我终于想通了。感谢 *** 上的附加帖子:CloudKit Sharing

您确实必须获取您的自定义区域。但是仅仅给它一个名字是不够的,比如“MyCustomZone”,因为在你的共享数据库中,它变成了MyCustomZone:_acBxxxyyyzzz。 CloudKit 添加的后缀。

如果您没有获取所有共享区域,则您永远不会拥有需要从中获取记录的正确自定义区域。

【讨论】:

你能把你所指的代码贴在这里吗? (获取共享自定义区域等)。真的很感激。谢谢!

以上是关于无法使用 CloudKit 获取 sharedCloudDatabase 自定义区域中的记录的主要内容,如果未能解决你的问题,请参考以下文章

无法从 CloudKit 通知信息和用户信息结构中获取 CKRecord.ID

CloudKit 无法从公共容器中获取数据。错误 1/4000

如何使用查询快速获取 cloudkit 数据

从 Cloudkit 获取音乐文件

Swift cloudkit CKFetchRecordZoneChangesOptions 无法返回删除记录

在 CloudKit 中获取私有用户记录