【问题标题】:Core Data store empty after app update - but data model hasn't changed应用程序更新后核心数据存储为空-但数据模型未更改
【发布时间】:2013-04-24 19:34:01
【问题描述】:

我正在为使用 Core Data 保存数据的应用程序开发更新。 我使用 Magical Record 来更轻松地处理 Core Data。

此更新不涉及对数据模型的任何更改。

然而,当我在设备上安装新更新时,现有数据会被删除,并且应用会打开并显示一个空的数据存储。没有记录有关数据迁移问题的警告或错误消息。该应用程序也不会崩溃,并且在设置 Core Data 堆栈之前将 shouldDeleteStoreOnModelMismatch 设置为 NO ([MagicalRecord setShouldDeleteStoreOnModelMismatch:NO];)。

没有后续的核心数据问题(新数据可以正常保存)。

本次更新对应用的主要改动有:

  • 将应用转换为 ARC
  • 将应用转换为将 CocoaPods 用于外部库
  • 将 MagicalRecord 库从 v1.8.3 更新到 v2.1

在我的 App Delegate 中,我使用以下方法设置了 Core Data 堆栈:

[MagicalRecord setupAutoMigratingCoreDataStack];

有人知道是什么原因造成的吗?

【问题讨论】:

  • 您是否尝试过从 setupAutoMigratingCoreDataStack 开始调试和逐步执行代码。
  • 是的,但是在 setupAutoMigratingCoreDataStack 执行之后,store 已经是空的了。
  • 您是否更改了应用名称(info.plist 中的 kCFBundleNameKey 键)?

标签: ios objective-c core-data automatic-ref-counting magicalrecord


【解决方案1】:

删除商店后,您需要指定要自动将商店替换为新商店,如此。

[MagicalRecord shouldAutoCreateDefaultPersistentStoreCoordinator]; [MagicalRecord setShouldDeleteStoreOnModelMismatch:YES]; [MagicalRecord setupAutoMigratingCoreDataStack];

【讨论】:

    【解决方案2】:

    当您的存储为空时,通常意味着您的迁移模型未正确升级,或者您的模型架构标识符与数据存储的版本标识符不匹配。

    确保保留核心数据模型的两个版本(之前和之后)。这就是核心数据如何将商店与您的模型匹配,以及如何知道哪个版本是最新版本。

    【讨论】:

    • 感谢您的快速回复。但问题是,更新不涉及对数据模型的任何更改。没有新版本,我也没有发现当前版本的数据模型相对于应用程序的先前版本有任何无意的变化(这可以解释这种情况)。 Magical Record 也不会在控制台中抛出任何错误或警告。
    • 刚刚仔细检查了 .xcdatamodeld 文件/目录的差异,自上次(成功)版本迁移以来没有任何更改。
    • 我必须看看你的应用发生了什么才能真正了解它。如果您没有新的模型版本,则不应触发迁移。然后,您的商店标识符应与模型匹配并加载。你能检查一下你的商店和模型的标识符,看看有哪些不同的实体吗?
    • 这似乎是由于 MagicalRecord 中存储 .sqlite 文件的位置发生了变化。它曾经(版本 1.8.3)在 /Library 目录中。现在(2.1 版)它在 /Library/Application Support/{Application Bundle Name} 和 Magical Record 搜索现有的 sqlite 存储在 /Library/Application Support/{Application Bundle Name} 和 /Documents - 但不在 /Library
    猜你喜欢
    • 2012-03-21
    • 2012-01-31
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多