【问题标题】:Synchronize core data on iOS devices在 iOS 设备上同步核心数据
【发布时间】:2013-12-03 10:25:34
【问题描述】:

我正在开发一个使用 iCloud 同步核心数据的应用程序。我有一个复杂的模型。接下来是我的问题: 1) [NSFileManager defaultManager] URLForUbiquityContainerIdentifier 经常返回 nil url,即使设备上启用了 iCloud。我读到它应该在另一个线程中调用它。但我需要显示同时使用核心数据的视图。因为这个我想使用第二个持久存储在其中存储本地数据,并且当普遍存储初始化时 - 迁移到它;迁移会覆盖存储中的所有数据 - 这种方式不适合。 2)解决方案是使用这里描述的种子商店:iOS: Migrating existing Core Data-database into iCloud 但是我有复杂的模型,很难将所有对象从一个存储复制到另一个存储,并且它使用大量内存。

请给我解决问题的建议。

可能是同步核心数据的另一种方式。不接受 Dropbox。

【问题讨论】:

  • 查看 Wasabi Sync.... 它是第 3 方服务。披露:我与他们没有私人关系,但我知道以前使用过它们的人,而且我知道作者。

标签: ios core-data sync icloud persistent-storage


【解决方案1】:

1) 您没有包含任何您正在使用的代码,但是当 iCloud 帐户处于活动状态并启用“文档和数据”时,我从未见过以下返回 nil。检查您是否正确调用它,并且每次都有正确的 ID。

NSString *ubiquityID = @"com.company.AppName";
NSURL *iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:ubiquityID];

您不需要在另一个线程上调用它(我不需要,它从来都不是问题)。

关于使用两个存储,如果您设置 iCloud 选项,Core Data 已经这样做了,它使用本地备用存储启动,以便在初始化 iCloud 同步本地存储时立即访问您的应用程序。完成此操作后,它会切换商店并发送通知。所以不清楚你为什么要创建自己的附加商店。

2) 我不明白您要解决的问题。如果您需要将初始数据加载到商店中,则可以通过在首次创建商店时从某个输入文件中读取来执行此操作,或者在应用程序包中包含一个商店,并在第一次运行应用程序时将此商店迁移到 iCloud 或以编程方式将数据复制到新存储。我会做前者,因为 Core Data 会为您完成所有工作。

【讨论】:

  • 2) 我不需要加载初始数据,我需要允许用户在创建无处不在的商店时同时使用应用程序。如果我在禁用 iCloud 的情况下使用本地商店或保存在应用程序包商店中,然后将其迁移到 iCloud - 迁移会覆盖无处不在的商店中的所有数据。例如,如果用户将启用 iCloud,插入一些记录,后期禁用 iCloud(应用程序将使用本地非普遍性存储),然后再次启用 iCloud - 第一次保存的所有更改都将丢失。
  • 如果启用了 iCloud 但未启用“文档和数据”,则调用 URLForUbiquityContainerIdentifier: 可以返回 nil。当然,我不知道这里是不是这样。
  • 好点 Tom,启用我想我的意思是用户有一个活动的 iCloud 帐户并启用了文档和数据。
猜你喜欢
  • 2018-06-03
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2011-12-30
  • 2014-03-01
  • 1970-01-01
相关资源
最近更新 更多