【问题标题】:Problem getting NSPersistentCloudKitContainer to sync between devices (SwiftUI, iOS)让 NSPersistentCloudKitContainer 在设备之间同步的问题(SwiftUI、iOS)
【发布时间】:2021-04-15 06:36:51
【问题描述】:

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

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

【问题讨论】:

    标签: core-data swiftui cloudkit nspersistentcloudkitcontainer


    【解决方案1】:

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

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

    信用:schwiftyui.com

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2011-05-08
      • 2012-09-06
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多