Apple推出了带有iOS13的NSPersistentCloudKitContainer,使我们能够将CloudKit与Core Data结合使用。我可以立即在不同的设备上运行它,但主要问题仍然存在。
是否可以与其他用户轻松共享数据? 我一直在阅读CKShare,但看不到如何从NSPersistentCloudKitContainer轻松实现。
答案 0 :(得分:3)
现在似乎可以通过新的 databaseScope 属性:https://developer.apple.com/documentation/coredata/nspersistentcloudkitcontaineroptions/3580372-databasescope
在iOS 14.0+ Beta和macOS 11.0+ Beta中实现可能的值为 .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介绍了如何通过将databaseScope
的值设置为.public
来将Core Data存储与CloudKit公共数据库同步。
[ UPDATE ]不幸的是,即使databaseScope = .shared
属性表明不是,也似乎还不支持共享。请参阅
https://developer.apple.com/forums/thread/649630?login=true&page=1#621748022,如下面的Brian M所指出。
答案 1 :(得分:2)
正如 WWDC 2021 中宣布的那样,您现在可以分享给其他 iCloud 用户。 https://developer.apple.com/videos/play/wwdc2021/10015/
答案 2 :(得分:0)
NSPersistentCloudKitContainer上有一些用于访问基础cloudkit记录的方法:https://developer.apple.com/documentation/coredata/nspersistentcloudkitcontainer。例如,
func record(for managedObjectID: NSManagedObjectID) -> CKRecord?
所以从理论上讲,您可以使用此方法获取CKRecord,然后手动创建CKShare。
从当前的beta版本(beta 3)开始,这些方法似乎返回nil。如果他们想隐藏实现,似乎他们将不会包括这些方法。因此,我们在这个位置上,您可以自己实现整个同步并获得共享,或者使用其同步实现但不获得共享。我希望这些方法缺乏实现只是一个早期的beta问题。