gpt4 book ai didi

ios - 在 iCloud 中使用 CoreData 时,iCloud 会同步所有 CoreData 数据吗

转载 作者:行者123 更新时间:2023-12-01 19:03:10 29 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

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

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

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

    关于ios - 在 iCloud 中使用 CoreData 时,iCloud 会同步所有 CoreData 数据吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562787/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com