Iphone 核心数据轻量级迁移属性重命名

Iphone 核心数据轻量级迁移属性重命名,iphone,objective-c,core-data,core-data-migration,Iphone,Objective C,Core Data,Core Data Migration,我知道在堆栈溢出中有很多关于核心数据迁移的问题,但我找不到解决问题的方法 通过将源模型中名为“LastName”的属性重命名为目标模型中的“LastName”,我成功地完成了轻量级迁移。我一步一步地做到了这一点,除了“Lastname”列上以前的所有数据现在都丢失了这一事实之外,它仍然有效。新的重命名属性存在,我可以插入新实体,并且新插入实体的值正常。问题在于旧数据和旧属性。正如苹果的文档所说,我通过XCode接口或代码将目标模型上新重命名属性的重命名标识符放在源模型中旧属性的名称上,但没有任何

我知道在堆栈溢出中有很多关于核心数据迁移的问题,但我找不到解决问题的方法

通过将源模型中名为“LastName”的属性重命名为目标模型中的“LastName”,我成功地完成了轻量级迁移。我一步一步地做到了这一点,除了“Lastname”列上以前的所有数据现在都丢失了这一事实之外,它仍然有效。新的重命名属性存在,我可以插入新实体,并且新插入实体的值正常。问题在于旧数据和旧属性。正如苹果的文档所说,我通过XCode接口或代码将目标模型上新重命名属性的重命名标识符放在源模型中旧属性的名称上,但没有任何效果。重命名属性上的数据始终丢失

这是意料之中的还是错过了什么


Thnxs,

我最近遇到了同样的问题,即使使用了重命名标识符,我的模型版本之间的数据也会丢失。模型从版本10跳到了版本15(版本11和版本12之间发生了更改),因此重命名标识符没有被删除,即使我在以后的版本中包含了它。我还遇到了如何处理随后对属性所做的任何更改的问题

最后,在将持久性存储连接到持久性存储协调器以执行轻量级迁移之前,我将以下代码添加到应用程序委托中persistentStoreCoordinator方法的中间(这是在安装添加核心数据的新项目时Apple占位符代码的一部分):

NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"];
NSPropertyDescription *property = [[entity attributesByName] objectForKey:@"NewAttributeName"];
[property setRenamingIdentifier:@"OldAttributeName"];
然后我在StackOverflow()上使用了这个问题,它描述了如何将CbundLeverVersion与持久性存储一起存储。这样,如果再次更新属性的名称,则可以检查持久存储的当前版本,并知道存储的最新版本,以便可以动态选择正确的重命名标识符