Я использую fetchAllRecordZones
для получения зон в sharedCloudDatabase.
Используя это, как источник, я могу успешно запрашивать зоны для получения записей в них из sharedCloudDatabase. Я также могу сделать подписку на sharedCloudDatabase, чтобы получать изменения и извлекать эти изменения.
Однако я не могу записывать (создавать или обновлять какие-либо записи) в sharedCloudDatabase, используя идентификатор зоны, который я получил с fetchAllRecordZones.
<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, в которую я пытаюсь записать данные через Dashboard.
Вот как я пытаюсь записать свои изменения:
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))
Поэтому я не уверен, что нужно сделать, чтобы мой шариат мог редактировать общие записи
I 'Я пробовал несколько вещей, одна из которых использует privateCloudDatabase, но я получаю «PrivateDB не может быть использован для доступа к зоне другого пользователя», что имеет смысл и, по крайней мере, может подтвердить, что моя зона допустима.
Любая помощьДобро пожаловать!