核心数据 - 将关系复制到新实体?
问题描述:
我想创建一个新的核心数据实体和复制[一些]其内容从旧的实体,使用以下(简化)代码:核心数据 - 将关系复制到新实体?
NSManagedObjectContext *context = [[UIApplication sharedApplication] delegate]).managedObjectContext;
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context];
MyEntity *newEntity = [[MyEntity alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:context];
newEntity.myRelationship = oldEntity.myRelationship;
被执行的最后一个任务之前,oldEntity
有对象由myRelationship
指出。
转让后,newEntity.myRelationship
指向相同的对象,但oldEntity.myRelationship
变成nil
。
我必须做什么才能将对象保留在旧实体中以及新实体中?
答
你的关系类型是X
。 oldEntity
和newEntity
都有一个one-to-one
关系到X
。
我认为您从X
到新老实体类型的关系也是one-to-one
。
你应该改变这一点。
在你的核心数据模型中,你可以改变它。 它应该看起来像:
Type X <-->> Type Y
哪里型Y
是旧的和新的实体类型。
您应该重新生成类型为X
的NSManagedObject
类。如果在实现中有逻辑,则应将其复制并粘贴到新生成的文件中。
请注意,实体X现在有多于1个Y型实体,因此它将是一个集合而不是一个实体。
注意:如果你想保持第一个对象的关系,你可能想选择另一个单词而不是'old'。这意味着该对象应该被删除。 – 2011-12-25 14:40:49
谢谢。我认为1:1关系只在实体保存时才会执行(我在临时保存之前需要临时保存旧数据)。至于名称,这是一个简化的代码,不是我的实际代码 - 但最终旧的实体被删除,因此使用OLD可能是合适的。 – 2011-12-25 14:53:36