16

Apple 推出了NSPersistentCloudKitContaineriOS 13,它使我们能够将 CloudKit 与 Core Data 一起使用。我让它在不同的设备上几乎立即工作,但我的主要问题仍然存在。

是否可以与其他用户轻松共享数据?我一直在阅读,CKShare但不知道如何NSPersistentCloudKitContainer以简单的方式实现这一目标。

4

3 回答 3

5

正如 WWDC 2021 中宣布的那样,您现在可以与其他 iCloud 用户共享。https://developer.apple.com/videos/play/wwdc2021/10015/

于 2021-06-14T07:41:48.057 回答
4

看来这现在可以通过新的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 。

于 2020-06-25T22:39:30.000 回答
2

NSPersistentCloudKitContainer 上有用于访问底层 cloudkit 记录的方法:https ://developer.apple.com/documentation/coredata/nspersistentcloudkitcontainer 。例如,

func record(for managedObjectID: NSManagedObjectID) -> CKRecord?

所以理论上你可以使用这个方法来获取一个 CKRecord 然后手动创建一个 CKShare。

但是从当前的 beta 版本(beta 3)开始,这些方法似乎返回 nil。如果他们想隐藏实现,他们似乎不会包含这些方法。所以我们在这个地方,您可以自己实现整个同步并获得共享,或者使用他们的同步实现但不能获得共享。我希望这些方法缺乏实现只是一个早期的 beta 问题。

于 2019-07-08T21:01:53.520 回答