让 NSPersistentCloudKitContainer 在设备之间同步的问题(SwiftUI、iOS)

时间:2021-01-09 21:40:31

标签: core-data swiftui cloudkit nspersistentcloudkitcontainer

我已经使用 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)")
            }
        })
    }
}

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

呈现数据的视图由

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

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

我已启用远程通知、CloudKit 和我的容器。我已经使用 CloudKit 仪表板检查过更改上传到云中的速度非常快。它们似乎没有那么快下载到设备上。

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

1 个答案:

答案 0 :(得分:0)

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

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

信用:schwiftyui.com

相关问题