【问题标题】:Will iCloud sync all CoreData data when using CoreData in iCloud在 iCloud 中使用 CoreData 时,iCloud 会同步所有 CoreData 数据吗
【发布时间】:2014-03-01 00:43:42
【问题描述】:

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

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

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

【问题讨论】:

  • 在其他人看来,这个标题是不是很像神秘人的引述? He who questions training only trains himself at asking questions.

标签: ios core-data icloud


【解决方案1】:

是的,它会同步商店中的所有数据。 但是故事远不止这些。

当您将持久存储添加到持久存储协调器时,您告诉 Core Data 使用 iCloud——在调用 addPersistentStoreWithType:configuration:URL:options:error: 时使用正确的选项值。如果您在此处告诉 Core Data 使用 iCloud,则该持久存储中的所有数据都将被同步。

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

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

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

如果不应该同步的数据确实是瞬态的,请考虑在设置非同步持久存储时使用NSInMemoryStoreType。这会使用更多内存,但它也使您无需删除存储内容。当应用程序存在时,内存中的存储就会消失。如果您可以节省内存,则使用起来会更方便。它们的工作方式几乎相同(例如,您仍然可以使用 NSFetchedResultsController),但它们永远不会保存到文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 2016-07-19
    • 2011-09-29
    • 2021-05-23
    • 2013-06-08
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多