核心数据“无法找到源存储的模型”;

时间:2014-01-23 11:02:12

标签: ios objective-c core-data model

继承人问题......我在应用程序商店中有一个应用程序,它使用核心数据......我一直在更新我的模型(使用版本等)但是最近我不小心丢失了我的最新模型(一个这与app store相对应)现在我收到此错误:reason =“找不到源存储的模型”;

我已经创建了我的模型,据我所知,我已经完成了与之前版本完全相同的更改......但我还是不能让它像我的模型版本一样。所以我的问题是,我能以某种方式欺骗核心数据,以为它拥有正确的版本吗?或者有没有办法可以检查哪些实体有问题?我知道核心数据存储模型的散列以检查版本是否相同,但我不知道版本模型必须在多大程度上相同才能使“散列检查”成功。

任何帮助都会很棒!谢谢!

3 个答案:

答案 0 :(得分:6)

您可以从应用的应用商店副本中恢复数据模型,然后将其导回到项目中。核心数据模型的编译方式与源代码的编译方式不同,因此反转过程通常是有效的。以下假设您已在Mac上的iTunes中下载了应用程序的当前应用程序商店版本:

首先将应用商店捆绑包复制到安全的地方:

cp ~/Music/iTunes/Mobile\ Applications/YOUR-APP-NAME.ipa /tmp
cd /tmp/

接下来打开那个包,这只是一个zip文件。

unzip YOUR-APP-NAME.ipa

这将创建一个名为Payload的目录,其中包含应用程序及其捆绑包。该捆绑包含核心数据模型。将其复制出捆绑包:

cp -rp Payload/YOUR-APP-NAME.app/YOUR-MODEL-NAME.momd /tmp/

(调整名称以匹配您的数据模型)。​​

如果您在应用商店中已有多个版本,则该模型为momd,其中包含多个mom个文件。每个mom文件对应一个模型版本。其中一个是你需要的。你需要弄清楚哪个是哪个。

现在,切换到Xcode。创建数据模型的新版本,但不要使其成为最新版本。 删除此版本中的所有内容,所有实体,所有内容。显示现在为空的模型后,转到Editor菜单并选择Import...。在文件打开对话框中,从上方导航到/tmp/中的数据模型副本。选择您需要恢复的版本,然后单击“打开”。

该模型版本中的所有实体现在都存在于刚刚创建的新模型文件中。现在,您可以在进行模型迁移时将此模型用作“原始”模型。

或者,您可以使用我的momdec项目来反编译模型,而不是导入Xcode。这将生成一个未编译的Core Data模型,您可以将其添加到Xcode项目中。

答案 1 :(得分:5)

供将来参考,不推荐。

如果模型不可恢复,您可以“假装”。

  1. 创建一个与您丢失的模型相同的新模型
  2. 测试一下,看看你是否幸运(不太可能)。
  3. 记下Core Data在日志中吐出的实体哈希值
  4. 将这些哈希值作为覆盖(版本哈希修饰符)
  5. 输入到模型中
  6. 再次运行迁移。
  7. 永远不要再修改生产模型。在发货时立即将其检入源控件。

答案 2 :(得分:0)

对于显示此问题且未尝试将核心数据模型迁移到另一个核心数据模型的任何人,如果您尝试将数据保存到未在实体中设置某些值的核心数据,则此错误也会显示。确保正确设置和设置所有数据变量以避免出现这样的错误,即MacBook Pros骑单片机的梦想可能永远存在于您的现实中!