gpt4 book ai didi

ios - 我没有在新版本中迁移 NSPersistentStore,我可以通过应用程序更新来恢复吗?

转载 作者:IT王子 更新时间:2023-10-29 06:19:43 28 4
gpt4 key购买 nike

长话短说,我的 Core Data 模式被更改,我的应用程序被提交到应用程序商店,这导致所有更新应用程序的人都崩溃了。崩溃是由于未正确迁移数据模型而导致缺少 NSPersistentStore 造成的。

我仍然在文档目录中看到 .sqlite 和关联的数据库文件,如果我降级到旧版本,所有数据都可以正常工作。我的问题是,我能否通过以某种方式迁移现有的 NSPersistentStore 并将其添加到 NSPersistentStoreCoordinator 来通过应用程序更新从中恢复?

编辑:所以我实际上并没有自己更改我的 xcdatamodel,因此,“长话短说”。但是,我确实从我的项目中删除了 XMPPFramework,我感觉这可能导致了核心数据问题。

编辑:
我没有直接对我的数据模型进行任何更改,但我已经查明了问题所在。我正在使用 [NSManagedObjectModel mergedModelFromBundles:nil] 检索我的 NSManagedObjectModel,它合并了包中存在的所有数据模型。这包括 XMPPFramework 附带的所有数据模型,现在框架已被删除,传递到 [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel] 的 NSManagedObjectModel 是不同的,从而导致崩溃。

我通过使用 FMDB 获取现有数据库的内容解决了这个问题,然后创建了一个新的 sqlite 文件并将持久存储协调器指向该新的 sqlite 文件。然后我通过遍历现有数据并创建适当的 NSManagedObject 将所有现有数据插入到新数据库中。我也停止使用 mergedModelFromBundles 来检索我的数据模型,而是使用 initWithContentsOfURL

最佳答案

实际上,您可能在第一个版本之后以某种方式更新了 xcdatamodel,而您没有为第二个版本创建新的 xcdatamodel 模型。所以在第二次更新时它崩溃了。

注意:第一个版本发布后,您必须创建 xcdatamodel 的第二个模型版本。

创建 xcdatamodel 的第二个模型版本 -
1. 首先,您必须选择 Model.xcdatamodeld -> 转到菜单上的编辑器 -> 添加模型版本。在这里你必须命名一个模型版本,并根据你想要创建这个新模型的旧模型。
现在,无论您想进行什么更改,都应该在新模型版本 xcdatamodel 上进行。

enter image description here

2.你可以在图片上看到,我为我的新模型“Model2.0”命名了一个新名称,它基于我以前的“模型”。
新模型将与您的旧模型完全一样工作,此外,对新模型所做的更改不会影响您的旧模型。因此它不会在更新后使您的应用崩溃。
3. 您必须选择新的“Model2.0”作为默认工作模型。为此,请考虑下图。

enter image description here

4. 在这里您可以看到现在有 2 个模型。请选择“Model.xcdatamodeld”作为主模型,然后在右侧打开它的“文件检查器”——如上图所示。

5. 右侧有'Model Version'字段,表示该项目选择的'current' model。请为您的更新版本选择新模型“Model2.0”。现在你可以运行了,它会继续正常工作。

注意:请确保现在您要进行的任何更改都是在您的新模型“Model2.0”上进行的,因此它不会与您的旧模型发生冲突。如果您想在更新的应用程序版本上更改 xcdatamodel 的配置,则每次都必须创建新模型。

关于ios - 我没有在新版本中迁移 NSPersistentStore,我可以通过应用程序更新来恢复吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31591807/

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