0

我已经使用 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 仪表板检查了这些更改很快就会上传到云中。似乎它们并没有那么快地下载到设备上。

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

4

1 回答 1

0

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

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

信用:schwiftyui.com

于 2021-01-09T21:55:10.907 回答