CloudKit使用获取的区域写入sharedCloudDatabase:“只能在共享数据库中访问共享区域”

时间:2019-10-22 00:30:17

标签: ios swift cloudkit

我正在使用fetchAllRecordZones来获取sharedCloudDatabase中的区域。

以此为共享对象,我可以成功地查询区域以从sharedCloudDatabase获取它们中的记录。我还可以订阅sharedCloudDatabase以获取更改并获取这些更改。

但是,我无法使用通过fetchAllRecordZones检索到的区域ID来写(创建或更新任何记录)在sharedCloudDatabase中。

<CKError 0x280d24390: "Partial Failure" (2/1011); "Failed to modify some records"; uuid = E33E6EA8-824A-4BBB-9455-5DD58091C696; container ID = "iCloud.com.my-id"; partial errors: {
  9E2B5947-536F-4DBB-8473-0902428AFA0E-67855-0000882339B04A4B:(SharedZone:_947ea1c9f3aeeb7dca58149ad40080e9) = <CKError 0x280d25890: "Invalid Arguments" (12/2006); server message = "Only shared zones can be accessed in the shared DB"; uuid = E33E6EA8-824A-4BBB-9455-5DD58091C696>
}>

我正在使用的区域是直接从fetchAllRecordZones提供的,我正在使用共享数据库访问共享区域。我可以确认SharedZone:_947ea1c9f3aeeb7dca58149ad40080e9是我要通过仪表板写入的sharedCloudDatabase中的区域。

这是我尝试编写更改的方式:

let operation = CKModifyRecordsOperation(recordsToSave: updatedRecords, recordIDsToDelete: deleteRecords)
operation.database = container.sharedCloudDatabase
operation.savePolicy = .changedKeys

operation.modifyRecordsCompletionBlock = { [weak self] _, _, error in
    guard error == nil else {
        DDLogError("Error modifying records: \(error!)")
        print(error!)
        return
    }

    DDLogInfo("Finished Pushing Shared Changes to CloudKit")
}

container.sharedCloudDatabase.add(operation)

并通过我的实体对象进行记录:

let zoneId = //.. cached from fetchAllRecordZones
let record = CKRecord(recordType: "Item", recordID: CKRecordID(recordName: self.uri, zoneID: zoneID))

所以我不确定如何使我的共享者能够编辑共享记录

我尝试了几件事,其中之一是使用privateCloudDatabase,但是我得到“ PrivateDB无法用于访问另一个用户的区域”的说法,这很有意义,并且至少可以确认我的区域是合法的。

欢迎任何帮助!

0 个答案:

没有答案