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

时间:2019-05-16 07:29:48

标签: ios swift cloudkit cloudkit-sharing

我正在尝试从sharedDatabase中的自定义区域中获取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">

关于我所缺少的任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

对,我终于明白了。多亏了StackOverflow上的这篇额外文章:CloudKit Sharing

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

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