核心数据iCloud合并协议

dav*_*dav 20 iphone core-data icloud

我已经设法让我现有的核心数据应用程序与iCloud一起使用.经过几天的学习,实际上非常简单.似乎有三件事是必不可少的:

  • 添加权利文件(在最近的Xcode中,可以通过选择目标,选择"摘要窗格",向下滚动,选中启用权利来完成)

  • 在我的情况下,添加持久存储时添加正确的选项

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
        // other options
        @"<arbitrary name>", NSPersistentStoreUbiquitousContentNameKey,
        iCloudURL, NSPersistentStoreUbiquitousContentURLKey,
        nil]
    
    Run Code Online (Sandbox Code Playgroud)

    哪里

    NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
    
    Run Code Online (Sandbox Code Playgroud)

这里的"nil"表示使用了Entitlements.plist文件中的信息.

  • 通过开发人员门户为应用程序启用iCloud支持.这可能涉及生成一个独特的应用程序ID,这是我之前没有做过的事情.

实际上,目前我不确定这最后一步对于开发至关重要 - 我已经启用了另一个没有这最后一步的应用程序,它似乎工作.

无论如何,我注意到不同iDevices上同一应用程序的两个现有核心数据库会将新条目同步到核心数据堆栈,但不会自动同步现有记录.

将数据从设备A同步到B的一种方法是删除B上的现有核心数据数据库,然后在B上重新启动应用程序.但是,这不是合适的合并.

在升级应用程序以使用iCloud支持时,是否有人知道在不同应用程序上合并两个现有核心数据数据库的方法,即使用上述选项以及所有这些?

谢谢

Lav*_*der 1

我还没有这样做,但是当保存到 iCloud 时,如果数据也已更新或存在于其他设备上,则存在信息冲突的高风险。如果冲突没有得到正确解决,那么两个设备之间的流量将无法正常发生。解决冲突可能很复杂,但最简单的就是让最近的人获胜。Apple 具有冲突处理程序,当保存并覆盖到无处不在的存储区时会触发冲突处理程序。