Совместное использование основных данных между пользователями с NSPersistentCloudKitContainer
Apple представила NSPersistentCloudKitContainer с iOS13, который позволяет нам использовать CloudKit с Core Data. Я сразу же начал работать на разных устройствах, но моя главная проблема все еще осталась.
Можно ли легко обмениваться данными с другими пользователями? Я читал на CKShare, но не понимаю, как мне легко перейти от NSPersistentCloudKitContainer к этому.
3 ответа
Как было объявлено на WWDC 2021, теперь вы можете поделиться с другими пользователями iCloud. https://developer.apple.com/videos/play/wwdc2021/10015/
Кажется, теперь это возможно в iOS 14.0+ Beta и macOS 11.0+ Beta через новое свойство databaseScope: https://developer.apple.com/documentation/coredata/nspersistentcloudkitcontaineroptions/3580372-databasescope
Возможные значения: .public (общедоступная база данных), .private (частная база данных) и .shared (общая база данных).
Например:
let container = NSPersistentCloudKitContainer(name: "test")
guard let description = container.persistentStoreDescription.first else {
fatalError("Error")
}
description.cloudKitContainerOptions?.databaseScope = .shared
Видео https://developer.apple.com/videos/play/wwdc2020/10650 описывает, как синхронизировать хранилище Core Data с общедоступной базой данных CloudKit, установив параметрdatabaseScope
ценность для .public
.
[ОБНОВЛЕНИЕ] К сожалению, похоже, что совместное использование (пока?) Не поддерживается, хотяdatabaseScope = .shared
свойство предполагает иное. См. Https://developer.apple.com/forums/thread/649630?login=true&page=1#621748022, как указано ниже Брайаном М.
В NSPersistentCloudKitContainer есть методы для доступа к базовым записям облачного набора: https://developer.apple.com/documentation/coredata/nspersistentcloudkitcontainer. Например,
func record(for managedObjectID: NSManagedObjectID) -> CKRecord?
Таким образом, теоретически вы можете использовать этот метод для получения CKRecord, а затем создать CKShare вручную.
НО, начиная с текущей бета-версии (бета 3) эти методы, похоже, возвращают ноль. Кажется, что они не включили бы эти методы, если бы хотели скрыть реализацию. Таким образом, мы находимся в этом месте, где вы можете реализовать всю синхронизацию самостоятельно и получить общий доступ или использовать их реализацию синхронизации, но не получить общий доступ. Я надеюсь, что отсутствие реализации этих методов - просто ранняя бета-версия.