Core data 神奇记录迁移失败“;Can';“找不到源存储的模型”;

Core data 神奇记录迁移失败“;Can';“找不到源存储的模型”;,core-data,magicalrecord,Core Data,Magicalrecord,我们对CoreData模型做了一些更改,看起来自动迁移失败了 即使我们将当前模型设置为用于生成数据的原始模型,仍然存在错误: reason=“无法找到源存储的模型” 2014-09-05 02:19:43.297[948:166846]-[LBAppDelegate应用程序:willFinishLaunchingWithOptions:]第132行$willfinish!! 2014-09-05 02:19:43.402[948:166846]+[LBR对象存在]第107行$don save 2

我们对CoreData模型做了一些更改,看起来自动迁移失败了

即使我们将当前模型设置为用于生成数据的原始模型,仍然存在错误:

reason=“无法找到源存储的模型”

2014-09-05 02:19:43.297[948:166846]-[LBAppDelegate应用程序:willFinishLaunchingWithOptions:]第132行$willfinish!!
2014-09-05 02:19:43.402[948:166846]+[LBR对象存在]第107行$don save
2014-09-05 02:19:52.395[948:166846]核心数据:错误:-addPersistentStoreWithType:SQLite配置:(null)URL:file:///var/mobile/Containers/Data/Application/0B3D4097-940C-433F-B6E5-E0EA6B08992F/Library/Applicat... 选项:{
NSInferMappingModelAutomaticallyOption=1;
NSMigratePersistentStoresAutomaticallyOption=1;
NSSQLitePragmasOption={
“日记账模式”=WAL;
};
} ... 返回的错误域=NSCOCAERRORDOMAIN Code=134130“操作无法完成。(Cocoa错误134130。)”用户信息=0x180f8620{URL=file:///var/mobile/Containers/Data/Application/0B3D4097-940C-433F-B6E5-E0EA6B08992F/Library/Applicat...,元数据={
NSPersistenceFrameworkVersion=519;
NSStoreModelVersionHashes={
AccessItem=;
AccessRule=;
航空公司=;
机场=;
联盟=;
AllianceTier=;
舒适度=;
数据=;
事件=;
饲料=;
图像=;
休息室=;
ParseObject=;
回顾=;
用户=;
投票=;
};
NSStoreModelVersionHashesVersion=3;
NSStoreModelVersionIdentifiers=(
""
);
NSStoreType=SQLite;
NSStoreUUID=“222748EF-2F19-4B87-829C-F8171E439430”;
“_NSAutoVacuumLevel”=2;
},reason=无法使用userInfo dictionary找到源存储}的模型{
URL=”file:///var/mobile/Containers/Data/Application/0B3D4097-940C-433F-B6E5-E0EA6B08992F/Library/Applicat...";
元数据={
NSPersistenceFrameworkVersion=519;
NSStoreModelVersionHashes={
AccessItem=;
AccessRule=;
航空公司=;
机场=;
联盟=;
AllianceTier=;
舒适度=;
数据=;
事件=;
饲料=;
图像=;
休息室=;
ParseObject=;
回顾=;
用户=;
投票=;
};
NSStoreModelVersionHashesVersion=3;
NSStoreModelVersionIdentifiers=(
""
);
NSStoreType=SQLite;
NSStoreUUID=“222748EF-2F19-4B87-829C-F8171E439430”;
“_NSAutoVacuumLevel”=2;
};
reason=“无法找到源存储的模型”;
}
2014-09-05 02:19:52.404[948:166846]核心数据:注释:NSPersistentStoreCoordinator的当前模型哈希为{
AccessItem=;
AccessRule=;
航空公司=;
机场=;
联盟=;
AllianceTier=;
舒适度=;
饲料=;
图像=;
休息室=;
ParseObject=;
回顾=;
用户=;
投票=;
}

您有一个型号,但它与商店不兼容。在我看来,您在没有添加版本的情况下对模型进行了更改。对于任何核心数据迁移,都需要源模型和目标模型。也就是说,核心数据需要知道原始数据和新数据的外观。从那里,核心数据可以推断(推断)自动迁移模型之间的变化。由于在本例中找不到源模型,并且我假设您的项目中仍然有一个模型,因此您很可能在不添加版本的情况下更改了数据模型。希望您正在使用一些源代码控制,并且可以恢复到与存储匹配的dat模型版本。从这里开始,您需要“添加模型版本”。在一个Xcode菜单中查找它。您还需要确保新版本是当前模型版本,以便迁移正确启动


而且,如果您使用的是MagicalRecord,则可以使用一种简单的帮助器方法,在附加存储时迁移数据。

如果您以前的版本没有更改,但您有多个
xcdatamodel
文件,并且正在使用
mergedModelFromBundles:
加载它们,也会发生这种情况。这就是
MagicalRecord
加载模型文件的方式

因此,如果您的依赖性(可能来自POD)具有另一个xcdatamodel,那么您的实际
源数据模型将与您要从中迁移的源数据模型不同,因为源数据模型表示所有内容的合并模型,因为
mergedModelFromBundles:

要解决这个问题,您需要创建一个与存储内容相匹配的前一个版本,而不仅仅是与前一个版本中的内容相匹配。为此,将缺少的模型添加到要从中迁移的
源数据模型
,然后从另一个
xcdatamodel
获取这些模型。幸运的是,您可以通过在实体列表中选择整个模型来复制和粘贴它们

例如: 之前:(失败)

之后:

Main.xcdatamodel 
  Version 2: Users, Posts, Comments
  Version 1: Users, Posts, Events, Data
Other.xcdatamodel
  Version 1: Events, Data
存储数据模型:

Version 1: Users, Posts, Events, Data
Version 2: Users, Posts, Comments, Events, Data

你能发布一点你的设置代码吗?您是如何打开核心数据并启动迁移的?我也有同样的错误。但那是我的错。最后,我无意中改变了旧的模型。这是很合乎逻辑的,我挣扎了很长一段时间。如果我们真的添加了一个版本,但仍然得到相同的问题呢?原始模型没有更改。与Maciej一样,我们也遇到了出现此错误的问题,即使原始模型没有更改,新模型只添加了一个字段。与Maciej和brainfree的问题相同。我甚至比较了散列,模型是兼容的
Main.xcdatamodel 
  Version 2: Users, Posts, Comments
  Version 1: Users, Posts, Events, Data
Other.xcdatamodel
  Version 1: Events, Data
Version 1: Users, Posts, Events, Data
Version 2: Users, Posts, Comments, Events, Data