Запись CloudKit в sharedCloudDatabase с использованием извлеченной зоны: «В общей базе данных могут быть доступны только общие зоны» - PullRequest
0 голосов
/ 22 октября 2019

Я использую 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 не может быть использован для доступа к зоне другого пользователя», что имеет смысл и, по крайней мере, может подтвердить, что моя зона допустима.

Любая помощьДобро пожаловать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...