使用NSPersistentCloudKitContainer在用户之间共享核心数据

时间:2019-06-26 08:44:47

标签: ios core-data cloudkit ckshare nspersistentcloudkitcontainer

Apple推出了带有iOS13的NSPersistentCloudKitContainer,使我们能够将CloudKit与Core Data结合使用。我可以立即在不同的设备上运行它,但主要问题仍然存在。

是否可以与其他用户轻松共享数据? 我一直在阅读CKShare,但看不到如何从NSPersistentCloudKitContainer轻松实现。

3 个答案:

答案 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问题。