【发布时间】:2021-03-24 00:12:02
【问题描述】:
有可能吗?
我用 Core Data 和 Cloudkit 设置了一个新的 iOS 14 应用程序。我必须对我的 Persistence.swift 文件进行一些更改才能使其正常工作,但它运行正常。
我有兴趣实现与other iCloud Users 的共享,但很多文档都已过时且令人困惑,而且似乎在某一时刻可能无法实现,但现在可以了吗?
我认为第一步是让我的数据库共享?我将以下行添加到我的 Persistence.swift 文件中
container.persistentStoreDescriptions.first!.cloudKitContainerOptions?.databaseScope = .shared
(这是全部内容):
import CoreData
struct PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentCloudKitContainer
init(inMemory: Bool = false) {
container = NSPersistentCloudKitContainer(name: "Shopmatic")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.persistentStoreDescriptions.first!.cloudKitContainerOptions?.databaseScope = .shared
}
}
但是当我运行应用程序时,我收到以下错误
Thread 1: "CKDatabaseScopeShared is not supported with NSPersistentCloudKitContainer"
这不令人鼓舞,但也许可以实现与公共数据库范围的共享?
我不确定接下来的步骤是什么?实现我自己的 NSPersistentContainer 来同步到 cloudkit 并允许共享?
【问题讨论】:
-
您可以使用AppGroup 和分享cloud kit container
-
@loremipsum 很有趣,我第一次听说 AppGroup,但我会进一步调查。如果您愿意,请随时详细说明完整的答案。
-
我稍后会发布一些代码(我现在离开我的 Mac)在尝试让 CoreData 与 Widget 和其他用户设备一起工作时遇到了这个问题。这并不完美,因为当编辑 CoreData 对象但小部件选择同时更新时,我无法更新小部件。
-
您想与同一设备中的扩展程序(即小部件)共享数据库吗?或者您想与其他人分享您的物品?
-
@EmilioPelaez 哦,是的,我想实现与其他人的共享,即:developer.apple.com/documentation/cloudkit/shared_records/…
标签: swift core-data swiftui cloudkit