在iCloud中使用Core Data时,iCloud会同步所有Core Data数据吗?

时间:2014-02-04 20:32:19

标签: ios core-data icloud

我有一个应用程序,我想添加iCloud支持。此应用程序从服务器加载数据,数据存储在CoreData中,以便NSFetchedResultsController可以管理UITableView

当应用程序终止时,几乎所有存储的数据都会被删除,因为数据对时间非常敏感,而且存储它是没有意义的。但是,CoreData中有一些项目已保存,例如某些项目的顺序和用户选择的收藏夹。

在iCloud中使用Core Data来跨设备同步这几个保存的项目是否有意义?我担心的是,一旦所有表视图都填充了临时数据,那么设备将使用带宽同步这些信息。

1 个答案:

答案 0 :(得分:3)

是的,它会同步商店中的所有数据。 故事的内容远不止于此。

当您将持久性存储添加到持久性存储协调器时,通过在调用addPersistentStoreWithType:configuration:URL:options:error:时使用正确的选项值,可以告诉Core Data使用iCloud。如果你告诉Core Data在这里使用iCloud,那么该持久存储中的所有数据都将被同步。

但是,您可以使用不同的持久性存储文件多次调用此方法。它被称为持久性存储协调器,因为它可以在多个持久性存储之间进行协调。大多数应用只使用一个,但您可以根据需要使用多个。

根据您的应用的工作方式,有几种不同的方法可以解决这个问题。

  • 如果在两个持久性存储中使用相同的Core Data实体类型(即同步数据和非同步数据都使用相同的实体),则需要告知管理对象上下文应该为每个新对象使用哪个存储库。您可以在创建对象时通过在上下文中调用assignObject:toPersistentStore:来执行此操作。
  • 如果对不同的商店使用不同的实体(即同步数据使用数据模型的一个子集,非同步数据使用不同的子集),则可以在数据模型中使用不同的配置,并自动选择商店。每个配置都有效地定义了仅包含一些实体的模型的命名子集。添加持久存储时使用正确的配置名称,新对象将转到相应的存储。

如果不同步的数据非常短暂,请在设置非同步持久性存储时考虑使用NSInMemoryStoreType。这使用了更多的内存,但它也使您无需删除商店内容。当应用程序存在时,内存存储就会消失。如果你可以节省内存,这可以更方便使用。它们的工作方式基本相同(例如,您仍然可以使用NSFetchedResultsController),但它们永远不会保存到文件中。