在iphone“自动轻量级迁移”期间发生了“无法找到源存储的模型”?

时间:2011-10-02 03:49:53

标签: ios iphone core-data core-data-migration

我真的被困在iPhone应用程序的v1到v2的升级测试中。我有IPA版本,我正在测试通过iTunes临时分发到我的iPhone设备,一个用于应用程序的v1,另一个用于v2。请注意:

  • v1 installs在我的设备上正常运行
  • 如果我删除v1并部署v2(所以没有迁移)那么它可以正常工作
  • 当我部署v2而v1已经存在时,我收到错误:“reason =找不到源存储的模型”

错误摘录...... *

reason=**Can't find model for source store**}, {
         URL = "file://localhost/var/mobile/Applications/AAAAF424-D6ED-40FE-AB8D-66879386739D/Documents/MyApp.sqlite";
         metadata =     {
             NSPersistenceFrameworkVersion = 320;
             <cut>
  • 当我使用“手机磁盘”查看我的设备时,我看到有Documents / MyApp.sqlite文件

问题 - 有任何想法如何解决这个问题?我可以在这做什么调试/分析?如果您需要更多信息,请与我们联系。

我作为概述所做的是:

PS更全面的错误版本,如果这有帮助 - 这次来自模拟模拟器上的迁移错误

, reason=Can't find model for source store}, {
    URL = "file://localhost/Users/greg/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/69FDFDCF-631D-4191-B852-CD75151B1EA9/Documents/MyApp.sqlite";
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            Config = <5f92f988 71e11a66 554ae924 61887562 22b8de8a c318b110 e3e4a569 81adafa2>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
            ""
        );
        NSStoreType = SQLite;
        NSStoreUUID = "3B9832DA-E3A1-431B-83E8-43431A7F3452";
    };
    reason = "Can't find model for source store";
}

PSS。如果这有助于每个版本的核心数据模型* .mom目录/包的内容是:

V1

-rw-r--r--   1 greg  staff  1664  5 Sep 21:06 MyApp.mom
-rw-r--r--   1 greg  staff  2656  5 Sep 21:06 MyApp.omo
-rw-r--r--   1 greg  staff   480  5 Sep 21:06 VersionInfo.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
  <plist version="1.0">
    <dict>
      <key>NSManagedObjectModel_CurrentVersionName</key>
      <string>MyApp</string>
      <key>NSManagedObjectModel_VersionHashes</key>
      <dict>
        <key>MyApp</key>
        <dict>
          <key>Config</key>
          <data>
            X5L5iHHhGmZVSukkYYh1YiK43orDGLEQ4+SlaYGtr6I=
          </data>
        </dict></dict></dict>
      </plist>

V2

-rw-r--r--  1 greg  staff   497  2 Oct 12:47 MyApp 1.mom
-rw-r--r--  1 greg  staff  1601  2 Oct 12:47 MyApp 2.mom
-rw-r--r--  1 greg  staff  1695  2 Oct 12:47 MyApp.mom
-rw-r--r--  1 greg  staff  2920  2 Oct 12:47 MyApp.omo
-rw-r--r--  1 greg  staff   665  2 Oct 12:47 VersionInfo.plist

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
  <plist version="1.0">
    <dict>
      <key>NSManagedObjectModel_CurrentVersionName</key>
      <string>MyApp</string>
      <key>NSManagedObjectModel_VersionHashes</key>
      <dict>
        <key>MyApp</key>
        <dict>
          <key>Config</key>
          <data>
            Z/n8092QBHPfBwInZvIm1lei53T1UtZhpNzjl3JA0gs=
          </data>
        </dict>
        <key>MyApp 1</key>
        <dict/>
        <key>MyApp 2</key>
        <dict>
          <key>Config</key>
          <data>
            Fih24clI+kZszFd3X6Gm8itq8YDxudiKnjHW8ydNmps=
          </data>
        </dict></dict></dict>
      </plist>

编辑:通过审查下面提供的链接jrturton提出的另一个我不清楚的问题是:

  1. 现在最新的XCode版本如何将“Set Current Version”设置为相应的模型版本文件?即之前的帖子突出显示两个不同的步骤,一个是添加模型版本,但随后单独“设置当前版本”
  2. 如何使用核心数据模型“标识符”字段,可以为每个核心数据模型文件设置该字段。它在检查员。该参数存在于例如MyApp 1.xcdatamodel,MyApp 2.xcdatamodel和MyApp.xcdatamodel文件中,因此您需要在每个文件中添加什么内容?

4 个答案:

答案 0 :(得分:37)

在选择xcdatamodeld文件时,在“标识和类型”选项卡下的“实用程序”检查器(右侧窗格)中设置数据模型的版本。这有一个名为“核心数据模型”的部分,以及一个名为“标识符”的字段。

通过选择xcdatamodeld文件添加新的模型版本,转到编辑器 - &gt;添加模型版本。

此时它会提示您输入以前的模型。

如果您在未经过此过程的情况下添加了新模型,则轻量级迁移可能无效。

答案 1 :(得分:3)

另一件可能导致这种情况的事情是,如果你:

  1. 制作第2版
  2. 然后意外编辑版本1
  3. 然后将版本2默认为
  4. 意识到你的改变不存在
  5. 在版本2上再次进行更改
  6. 您获得相同的效果,因为您尝试合并的版本1不是创建商店的版本。

答案 2 :(得分:1)

如果您对模型进行了更改,并且确保生成模型对象并且不关心迁移,也不想创建新版本,则只需要执行产品 - &gt;清洁,这通常可以解决这个问题。

如果您仍然遇到此错误,请找到您的sqlite数据库并将其删除。当您再次启动应用程序时,它将创建一个由新模型构建的新应用程序。

或者,您可以从模拟器中删除该应用程序,或者如果其他所有方法都失败,请点击&#34; iOS设置&#34;在模拟器的顶部,选择&#34;重置内容和设置...&#34;它会快速擦拭模拟器,让你重新开始。

答案 3 :(得分:0)

Xcode 8 ,我没有做迁移就遇到了这个问题

  

找不到源存储的模型

我所做的只是

<div id="dropDownMenu" class="dropDownMenu">
                    <ul class="rock">Rock</ul>
                    <ul class="pop">Pop</ul>
                    <ul class="metal">Metal</ul>
                    <ul class="alternative">Alternative</ul>
                    <ul class="country">Country</ul>
                </div>
            </div>
            <div id="inStoreRecordsContainer">
                <div class="recordElement" class="pop">
                    <img src="img/inStoreMusic/bowie.jpg">
                    <p class="recordInfo">David Bowie<br>Aladdin Sane</p>
                </div>
                <div class="recordElement" class="rock" class="metal">
                    <img src="img/inStoreMusic/metallica.jpg">
                    <p class="recordInfo">Metallica<br>Master of Puppets</p>
                </div>
                <div class="recordElement" class="rock" class="pop">
                    <img src="img/inStoreMusic/nirvana.jpg">
                    <p class="recordInfo">Nirvana<br>Nevermind</p>
                </div>
                <div class="recordElement" class="pop">
                    <img src="img/inStoreMusic/blink182.jpg">
                    <p class="recordInfo">Blink 182<br>California</p>
                </div>
                <div class="recordElement" class="pop">
                    <img src="img/inStoreMusic/beatles.jpg">
                    <p class="recordInfo">The Beatles<br>Sgt. Pepper's Lonely Hearts Club Band</p>
                </div>
                <div class="recordElement" class="pop">
                    <img src="img/inStoreMusic/beyonce.jpg">
                    <p class="recordInfo">Beyoncé<br>Beyoncé <i>(not a typo)</i></p>
                </div>
                <div class="recordElement" class="country">
                    <img src="img/inStoreMusic/cash.jpg">
                    <p class="recordInfo">Jonny Cash<br>CASH</p>
                </div>