Apple 推出了NSPersistentCloudKitContainer
iOS 13,它使我们能够将 CloudKit 与 Core Data 一起使用。我让它在不同的设备上几乎立即工作,但我的主要问题仍然存在。
是否可以与其他用户轻松共享数据?我一直在阅读,CKShare
但不知道如何NSPersistentCloudKitContainer
以简单的方式实现这一目标。
Apple 推出了NSPersistentCloudKitContainer
iOS 13,它使我们能够将 CloudKit 与 Core Data 一起使用。我让它在不同的设备上几乎立即工作,但我的主要问题仍然存在。
是否可以与其他用户轻松共享数据?我一直在阅读,CKShare
但不知道如何NSPersistentCloudKitContainer
以简单的方式实现这一目标。
正如 WWDC 2021 中宣布的那样,您现在可以与其他 iCloud 用户共享。https://developer.apple.com/videos/play/wwdc2021/10015/
看来这现在可以通过新的databaseScope属性在 iOS 14.0+ Beta 和 macOS 11.0+ Beta 中实现: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描述了如何通过将databaseScope
值设置为 来将 Core Data 存储与 CloudKit 公共数据库同步.public
。
[更新]不幸的是,似乎(还没有?)支持共享,即使该databaseScope = .shared
属性另有建议。请参阅
下面 Brian M 指出的https://developer.apple.com/forums/thread/649630?login=true&page=1#621748022 。
NSPersistentCloudKitContainer 上有用于访问底层 cloudkit 记录的方法:https ://developer.apple.com/documentation/coredata/nspersistentcloudkitcontainer 。例如,
func record(for managedObjectID: NSManagedObjectID) -> CKRecord?
所以理论上你可以使用这个方法来获取一个 CKRecord 然后手动创建一个 CKShare。
但是从当前的 beta 版本(beta 3)开始,这些方法似乎返回 nil。如果他们想隐藏实现,他们似乎不会包含这些方法。所以我们在这个地方,您可以自己实现整个同步并获得共享,或者使用他们的同步实现但不能获得共享。我希望这些方法缺乏实现只是一个早期的 beta 问题。