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

use*_*671 1 model core-data objective-c ios

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

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

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

Tom*_*ton 6

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

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

cp ~/Music/iTunes/Mobile\ Applications/YOUR-APP-NAME.ipa /tmp
cd /tmp/
Run Code Online (Sandbox Code Playgroud)

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

unzip YOUR-APP-NAME.ipa
Run Code Online (Sandbox Code Playgroud)

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

cp -rp Payload/YOUR-APP-NAME.app/YOUR-MODEL-NAME.momd /tmp/
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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


Mar*_*rra 5

供将来参考,不推荐.

如果模型不可恢复,您可以"假装".

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