Ios 应用程序更新后核心数据存储为空-但数据模型尚未';不改变
我正在开发一个应用程序的更新,它使用核心数据来持久化数据。 我使用神奇的记录使处理核心数据变得更容易 此更新不涉及对数据模型的任何更改 然而,当我在设备上安装新的更新时,现有数据会被删除,应用程序打开时会显示一个空的数据存储。没有记录有关数据迁移问题的警告或错误消息。应用程序也不会崩溃,在设置核心数据堆栈之前,shouldDeleteStoreOnModelIsMatch设置为否(Ios 应用程序更新后核心数据存储为空-但数据模型尚未';不改变,ios,objective-c,core-data,automatic-ref-counting,magicalrecord,Ios,Objective C,Core Data,Automatic Ref Counting,Magicalrecord,我正在开发一个应用程序的更新,它使用核心数据来持久化数据。 我使用神奇的记录使处理核心数据变得更容易 此更新不涉及对数据模型的任何更改 然而,当我在设备上安装新的更新时,现有数据会被删除,应用程序打开时会显示一个空的数据存储。没有记录有关数据迁移问题的警告或错误消息。应用程序也不会崩溃,在设置核心数据堆栈之前,shouldDeleteStoreOnModelIsMatch设置为否([MagicalRecord SetShouldDeleteStoreOnModelIsMatch:NO];) 没有
[MagicalRecord SetShouldDeleteStoreOnModelIsMatch:NO];
)
没有后续的核心数据问题(新数据保持良好)
此更新中对应用程序所做的主要更改包括:
- 将应用程序转换为ARC
- 已将应用程序转换为将CoCoapod用于外部库
- 将MagicalRecord库从v1.8.3更新为v2.1
[MagicalRecord setupAutoMigratingCoreDataStack];
有人知道是什么导致了这种情况吗?当存储空间为空时,通常意味着迁移模型没有正确升级,或者模型架构标识符与数据存储的版本标识符不匹配
确保保留核心数据模型的两个版本(之前和之后)。这就是核心数据如何将存储区与您的模型匹配,以及如何知道哪个版本是最新版本。删除存储区后,您需要指定要自动将存储区替换为新的存储区
[MagicalRecord应自动创建DefaultPersistentStoreCoordinator];
[MagicalRecord SetShouldDeleteStoreOnModelIsMatch:是];
[MagicalRecord设置自动迁移CoreDataStack];
您是否尝试过从setupAutoMigratingCoreDataStack开始调试和单步执行代码。是的,但在setupAutoMigratingCoreDataStack执行后,存储区已为空。是否更改了应用程序名称(info.plist中的kCFBundleNameKey)?感谢您的快速回复。但问题是,更新不涉及对数据模型的任何更改。没有新版本,我也没有发现当前版本的数据模型相对于以前版本的应用程序有任何意外的变化(这可以解释这种情况)。Magic Record也没有在控制台中抛出任何错误或警告。只需重新检查.xcdatamodeld文件/目录的差异,自上次(成功)版本迁移以来,它没有任何更改。我必须看看你的应用程序发生了什么,才能真正了解它。如果没有新的模型版本,则不应触发迁移。然后,您的商店标识应与型号和负载匹配。您能否检查存储和模型的标识符,并查看哪些实体不同?这似乎是由于MagicalRecord更改了.sqlite文件的存储位置所致。它以前(版本1.8.3)位于/Library目录中。现在(版本2.1)在/Library/Application-Support/{Application-Bundle-Name}和/Library/Application-Support/{Application-Bundle-Name}和/Documents中搜索现有sqlite存储,但不在/Library中