iPhone“自动轻量级移植”期间发生的“源存储模式找不到”?

我真的陷入了iPhone应用程序从V1到V2的升级testing。 我有IPA版本,我正在通过iTunes专门分发到我的iPhone设备,一个用于v1版本的应用程序,另一个用于v2版本。 注意:

  • v1安装在我的设备上运行良好
  • 如果我删除V1和部署V2(所以没有迁移),那么它工作正常
  • 当我部署v2,而v1已经在那里,我得到的错误:“原因=无法find源存储模型”

来自错误的片段… *

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文件

问题 – 任何想法如何解决这个问题? 我可以在这里做什么样的debugging/分析? 让我知道如果你需要更多的信息。

我所做的概述是:

  • 没有为我的核心数据模型设置一个版本(即在版本的时候没有真正意识到,所以没有设置一个版本),将我的v1应用程序部署到AppStore。
  • 对于v2而言,唯一的附加变化是在一个模型上的一个新属性
  • 所以对于V2版本我所做的是:
  • 重新创build了一个新的核心数据模型
  • 为该模型创build了一个v1版本
  • 创build了v1的对象/属性
  • 保存
  • 为该模型创build了一个v2版本
  • 创build了一个额外的属性
  • 保存
  • 重新创build托pipe对象类
  • 更新了代码,以便将选项置于每个http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1调用addPersistentStoreWithType

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> 

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

  1. 现在在最新的XCode版本中,如何将“设置当前版本”设置为适当的型号版本文件? 即以前的post突出显示了两个不同的步骤,一个是添加模型版本,另一个是“设置当前版本”
  2. 如何使用可为每个核心数据模型文件设置的核心数据模型“标识符”字段。 在检查员那里 这个参数是针对MyApp 1.xcdatamodel,MyApp 2.xcdatamodel和MyApp.xcdatamodel文件而存在的,那么你需要在这里放置什么?

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

您可以通过selectxcdatamodeld文件来添加新的模型版本,即编辑器 – >添加模型版本。

在这一点上,它会提示您以前的模型为基础。

如果您已添加新模型而未经过此过程,则轻量级迁移可能无效。

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

  1. 使版本2
  2. 然后不小心编辑版本1
  3. 然后使版本2默认
  4. 意识到你的改变不在那里
  5. 在版本2上再次进行更改

您会得到相同的效果,因为您要从中合并的版本1不是创build商店的版本。

如果您对模型进行了更改,并且确保生成了模型对象,并且不关心迁移,也不希望创build新版本,则只需执行“产品” – >“清理”,并且通常会修复此问题问题。

如果你仍然有这个错误,find你的sqlite数据库并删除它。 当你再次启动应用程序时,它将会创build一个新的模型。

或者,您可以从模拟器中删除应用程序,或者如果所有其他方式都失败,请点击模拟器顶部的“iOS设置”,然后select“重置内容和设置…”,然后快速擦除模拟器,以便启动新鲜。

Xcode 8 ,我有这个问题没有做迁移

无法find源存储的模型

我所做的只是简单的

 Simulator > Reset Content and Settings