让 NSPersistentCloudKitContainer 在设备之间同步时出现问题(SwiftUI,iOS)

Problem getting NSPersistentCloudKitContainer to sync between devices (SwiftUI, iOS)

我已经使用 NSPersistentCloudKitContainer 设置了我的核心数据模型:

struct PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentCloudKitContainer
    init(inMemory: Bool = false) {
        container = NSPersistentCloudKitContainer(name: "LearningCloudKit")
        if inMemory {
            container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
        }
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
    }
}

这几乎是 Xcode 在我使用 CoreData 和 CloudKit 创建新项目时呈现的标准内容。

呈现数据的视图由

提供
    @Environment(\.managedObjectContext) private var viewContext
    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: false)],
        animation: .default)
    private var items: FetchedResults<Item>

我的设备之间的同步有些工作,但是当我将新数据输入一台设备时,另一台设备需要超过 15 分钟的时间才能显示出来。不知道,有时直到我强行关闭应用程序并重新启动它才会到达。有时我必须在一台设备上输入数据并强制关闭才能看到另一台设备的数据。

我启用了远程通知,我启用了 CloudKit 和我的容器。我已经检查了 CloudKit 仪表板,更改非常快地上传到云中。好像没那么快下载到设备上。

我还需要做什么才能使它正常工作?就像在一台设备中输入数据,不到一分钟它就会出现在另一台设备上。也许是后台服务?

我的天啊。我自己找到了答案。在最后的 PersistenceController 中,我添加了:

container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.automaticallyMergesChangesFromParent = true

来源:schwiftyui.com