У меня есть приложение, в котором я могу создавать записи и делиться ими с другими пользователями. Когда я делюсь записью и пользователь принимает ее, я могу отобразить общий объект сразу после вызова userDidAcceptCloudKitShareWith
и использования класса CKFetchRecordsOperation
для извлечения объекта, никаких проблем здесь нет. Моя проблема заключается в попытке прочитать общие записи непосредственно из Shared Database
после того, как пользователь принял запись, закрыл приложение и снова открыл приложение.
Следующий код успешно считывает все записи из Private Database
находится в зоне с именем ListsZone
.
@IBAction func sharedRecords(_ sender: Any) {
let privateDatabase = CKContainer.init(identifier: "iCloud.com.mySite.lists").database(with: .private)
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Items", predicate: predicate)
let ckRecordZoneID = CKRecordZone(zoneName: "ListsZone")
let ckRecordID = CKRecord.ID(zoneID: ckRecordZoneID.zoneID)
privateDatabase.perform(query, inZoneWith:ckRecordID.zoneID){( results , error) in
guard error == nil else{
print("Error \(String(describing: error?.localizedDescription))")
return
}
if let itemsFromResults = results{
print("Items: \(itemsFromResults)")
}
}
}
Я ожидаю, что смогу прочитать общие записи из Shared Database
с тем же кодом, что и выше, за исключением изменения строки ниже , но это не работает.
let privateDatabase = CKContainer.init(identifier: "iCloud.com.mySite.lists").database(with: .shared)
Я получаю следующую ошибку.
"В общей базе данных могут быть доступны только общие зоны"
Чего мне не хватает?
Как правильно читать записи с Shared Database
?
У меня сложилось впечатление, что пользователи, которые уже приняли общую запись от пользователя и записи сохраняются в Shared Database
, пользователь может получить доступ к записям, запросив Shared Database
напрямую, как показано в моем коде выше.
К вашему сведению - я знаю, что в общей базе данных есть общие записи, потому что я вижу их на панели инструментов CloudKit.