gpt4 book ai didi

swift - addPersistentStoreWithType 到底在做什么?

转载 作者:搜寻专家 更新时间:2023-11-01 07:21:03 26 4
gpt4 key购买 nike

当调用 NSPersistentStoreCoordinator 对象的 addPersistentStoreWithType 方法时,到底发生了什么?

通过查看网络上的示例,我看到调用此方法会将给定 URL 处的持久存储添加到我们的持久存储协调器,对吗?

我的主要问题是如果出现以下情况会发生什么:

  • 在给定的 URL 上还没有持久存储?它是不是通过调用此方法自动为我们创建的?还是我们必须做其他事情?
  • 如果在给定的 URL 上已经有一家商店,它是被替换还是什么的?如果数据模型发生变化(例如,如果您向托管类添加新属性)会发生什么情况。

谢谢!

最佳答案

如果给定的 URL 没有商店,CoreData 将创建它,并根据与您的持久性商店协调器关联的 managedObjectModel 添加相关表。

如果给定的 URL 有商店,CoreData 将检查以确保它与模型一致。如果不是,那么(默认情况下)CoreData 将抛出一个错误:

The model used to open the store is incompatible with the one used to create the store

这是人们第一次开始构建和设计 CoreData 应用程序时的常见问题。在那个阶段最简单的解决方案就是从模拟器中删除应用程序(这会删除现有商店)并重新运行。但这不是生产应用程序的可行解决方案,生产应用程序需要在保留用户数据的同时适应模型的设计更改。为了解决这个问题,CoreData 支持一个模型的多个版本,并有一个广泛的 API 用于从一个模型版本迁移到另一个模型版本。引用Core Data Model Versioning and Data Migration Guide获取完整信息。

对于许多模型更改,您可以使用“轻量级迁移”。参见 this answer一个使用轻量级迁移的好例子。

关于swift - addPersistentStoreWithType 到底在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007152/

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