我有几个不同的应用程序,我想在同一设备和跨设备上共享个人核心数据存储。我一直在试验NSPersistentCloudKitContainer,这似乎是有效的,但它可能需要一段时间来同步,它不清楚什么时候有。我还尝试过使用应用程序组,其中SQLite文件放置在组文件夹中,以便设备上的其他应用程序立即可以使用更改。我的问题是,是做一个更好,还是做另一个更好,还是两者都更好。访问共享SQLite的两个应用程序在同一设备上打开会导致冲突问题吗?如果我已经与共享组同步了,我还需要与cloudKit同步数据吗?单独使用NSPersistentCloudKitContainer意味着每个应用将在本地同步它自己的数据副本,这似乎不是很有效,我不知道当我打开另一个应用时它是否同步。但当我同时打开两个应用程序时,我看到了冲突。当一个应用程序进入后台时,是否有一种万无一失的方法来防止冲突?
App组和CloudKit相互正交。它们可以解决不同的问题,你可以根据你想做的事情使用其中一个或另一个或两者。应用程序组很适合在一个设备上共享数据,而CloudKit可以跨多个设备工作。如果你想让这两种情况同时发生,你可以用both。这不是非此即彼,它要么是其中之一,要么两者都取决于应用。
避免冲突的唯一万无一失的方法是永远不要在多个地方编辑相同的数据。由于这两种情况都不可能发生,所以最好看看如何在冲突出现时解决冲突。Core Data有几个内置的合并策略来解决冲突的变化,如果你想要不同的东西,你可以自己写。使用CloudKit,当有新的更改可用时,您的应用程序将收到通知。然后合并更改,并让合并策略处理冲突。对于应用程序组,没有外部更改的通知,所以最好的方法是每当应用程序进入前台时检查新数据(以防它在其他地方被编辑)。
如果你遇到了不知道如何解决的冲突,可以单独发一个问题,说明问题的细节,这样别人可能会帮助你。