在iOS设备上同步核心数据

时间:2013-11-19 18:08:44

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

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

请在问题解决方案中给我建议。

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

1 个答案:

答案 0 :(得分:0)

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

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

你不需要在另一个线程上调用它(我没有,它从来没有问题)。

关于使用两个商店,如果您设置iCloud选项,Core Data已经执行此操作,它会使用本地回退存储启动,以便在初始化iCloud同步本地存储时为您的应用提供即时访问。完成此操作后,它会切换存储并发送通知。所以不清楚为什么你想创建自己的额外商店。

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