【问题标题】:core data iCloud merge protocol核心数据 iCloud 合并协议
【发布时间】:2012-02-12 05:11:47
【问题描述】:

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

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

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

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
        // other options
        @"<arbitrary name>", NSPersistentStoreUbiquitousContentNameKey,
        iCloudURL, NSPersistentStoreUbiquitousContentURLKey,
        nil]
    

    在哪里

    NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
    

此处的“nil”表示使用了来自 Entitlements.plist 文件的信息。

  • 通过开发者门户为应用程序启用 iCloud 支持。这可能涉及生成一个唯一的应用程序 ID,这是我以前没有做过的事情。

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

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

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

在升级应用程序以使用 iCloud 支持(即使用上述选项等)时,是否有人知道如何合并不同应用程序上的两个现有核心数据数据库?

谢谢

【问题讨论】:

  • 也许你能在这个类似的问题中找到帮助stackoverflow.com/questions/6588180/…
  • 不,尽管 Recipes 应用程序包含有用的代码(其中在后台将存储添加到持久存储协调器 --- 在合并大型核心数据数据库时很有用)它不能解决问题合并两个不同设备上的两个预先存在的核心数据实例。我一直在寻找一种以某种方式重放事务日志的方法。
  • 有任何进展@davidav?我遇到了同样的问题。
  • 不,不是。我现在的行为越来越奇怪。似乎有些更新丢失了,这使得两个不同设备上的数据库不同。我现在正在使用在单独的线程中启动持久存储协调器的方法——就像上面的食谱一样——但这并没有让事情变得更好或更透明。

标签: iphone core-data icloud


【解决方案1】:

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

【讨论】:

  • 核心数据iCloud实现其实还不错,一般不会出现太多冲突。也许如果您在两个不同的实例中编辑相同的记录,可能最后保存的记录最终会占上风。
【解决方案2】:

也许这有帮助:https://gist.github.com/1475162@steipete

【讨论】:

  • 我相信这个链接是基于 UIDocument 的同步,问题是关于核心数据同步的问题。
猜你喜欢
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多