Cloudkit + 核心数据不同步

Posted

技术标签:

【中文标题】Cloudkit + 核心数据不同步【英文标题】:Cloudkit + Core Data not synching 【发布时间】:2020-07-13 15:33:26 【问题描述】:

我有一个 Core Data + Couldkit 应用程序,其中在其他设备上所做的任何更改都不会同步。我不得不再次调用 fetch 方法刷新数据。对实体的关系进行更改,例如将对象添加到 NSManagedObject 关系集。然后我使用谓词获取对象,然后仅从关系(NSSet)中填充表视图中的数据。

即使我在另一个视图控制器中添加数据,更改也不会反映在我显示添加的数据的父控制器中。我必须添加一个通知观察者才能完成这项工作并再次获取数据。

我什至在 AppDelegate 中添加了必要的行,

let container = NSPersistentCloudKitContainer(name: "myappcontainername")
container.viewContext.automaticallyMergesChangesFromParent = true

以下是CoreData修改后的日志,

CoreData+CloudKit: -[NSCloudKitMirroringDelegate finishedAutomatedRequestWithResult:](2119): Finished request '<NSCloudKitMirroringExportRequest: 0x6> -UUID' with result: <NSCloudKitMirroringResult: 0x> success: 1 madeChanges: 1 error: (null)

这意味着我的更改已与 Cloudkit 同步。

我还应该做些什么来完成这项工作?

【问题讨论】:

【参考方案1】:

你是这样设置你的容器的吗?

  let options = NSPersistentCloudKitContainerOptions(containerIdentifier: id)
    
  let description = container.persistentStoreDescriptions.first
    
   
  description?.cloudKitContainerOptions = options
  description?.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
  description?.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)

【讨论】:

不。我只是通过检查 Tickbox for use cloud kit 使用了样板代码。我从 Apple 提供的示例中复制了相同的代码,它可以工作。仍在弄清楚我的代码到底出了什么问题。这与现有的样板代码有何不同?

以上是关于Cloudkit + 核心数据不同步的主要内容,如果未能解决你的问题,请参考以下文章

iOS 上的 CloudKit + CoreData 和 watchOS 同步不起作用

如何在 Swift 中将 Core Data 与 Cloudkit 和许多设备同步

App 如何根据需要动态为 CoreData 开启 CloudKit 云同步功能

App 如何根据需要动态为 CoreData 开启 CloudKit 云同步功能

CloudKit fetchRecordChangesOperation 给出“AppDefaultZone 不支持同步语义”

CloudKit:使用通知使更改在多个设备之间保持同步