我正在维护一个已在AppStore上运行几个月的应用程序。 我的应用程序使用核心数据,不知怎的,我设法丢失了以前版本的xcdatamodel。
我希望执行轻量级迁移。我需要做的就是为我的一个实体添加一个属性。所以,我遵循了创建模型版本的正确步骤。
显然,我修改了原来的xcdatamodel。因此,当我测试迁移时,它失败并出现错误Code = 134130“无法找到源存储的模型”。由于设备/模拟器上没有sqlite文件时app运行正常,我得出结论原始xcdatamodel已被修改。
假设我的逻辑到目前为止,我怎样才能创建一个与用户设备上的sqlite文件匹配的xcdatamodel。他们丢失数据是不可接受的。
谢谢。
答案 0 :(得分:2)
根据Apple的核心数据versioning guidelines,在以下情况下,两个版本的核心数据被视为可识别:
对于每个实体,以下属性必须相等:name,parent,isAbstract和properties。 不比较className,userInfo和验证谓词。
对于每个实体中的每个属性,以下属性必须相等:name,isOptional,isTransient,isReadOnly,属性attributeType以及关系destinationEntity,minCount,maxCount,deleteRule和inverseRelationship。
如果您当前的xcdatamodel是一个全新的文件,我认为您所做的任何事情都不会使原始版本和当前版本匹配。但是,如果当前版本只是意外修改的原始版本,您可以查看较旧生成的模型文件并尝试找出更改的内容。
例如:在模型上你有一个“NSString * age”属性,但在你当前的xcdatamodel上,属性是“NSNumber * age”。
另外,请记住,您看到的错误可能是由生成的与数据库不同步的模型文件引起的,因此请尝试重新创建它们。
答案 1 :(得分:0)
打开Core Data模型文件(例如空白),选择Editor -> Import
,然后找到应用程序旧版本中的.mom
文件。
请参阅this answer。