0

我是核心数据的新手,如果有人可以根据给定的要求提供反馈/提示我,那就太好了。

Entity A
{
property 1;
property 2;
property 3;
}
Entity B
{
property 1;
property 2;
property 3;

}
Entity C
{
EntityB ObjB; // pointing to Entity B
EntityA ObjA; // pointing to Entity A
property 1;
property 2;
property 3;
}
Entity D
{
EntityB ObjB; // pointing to Entity B
EntityA ObjA; // pointing to Entity A
property x;
property y;
property z;

}

新插入的对象需要存储到具有更多属性的实体 C、实体 D 中。

为了隔离插入到主要上下文,使用下面提到的方法

 NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityB" inManagedObjectContext:self.managedObjectContext];
    objB = [[EntityB alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];

由于我已将 objB 和 objA 存储到 EntityC 中,因此将使用下面的 EntityD 方法。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityC" inManagedObjectContext:self.managedObjectContext];
        objC = [[EntityC alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
objC.objB = objC;

NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityD" inManagedObjectContext:self.managedObjectContext];
        objD = [[EntityD alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
objD.objB = objB;

然后最后我会将所有对象保存到主上下文中。

  [self.managedObjectContext insertObject:objB];
  [self.managedObjectContext insertObject:objC];
  [self.managedObjectContext insertObject:objD];
  [self.managedObjectContext save:&error];

由于我对核心数据没有太多经验,我想知道他们存储信息的方式是好的,或者在提到的场景中还有另一种存储数据的方法。

感谢您宝贵的时间。

4

1 回答 1

0

这个:

objC.objB = objC;

没有意义,可能是一个错字,你的意思是

objC.objB = objB;

这个:

objD.objB = objB;

objD是正确的并且建立了和之间的关系objB

这些电话:

[self.managedObjectContext insertObject:objB];
[self.managedObjectContext insertObject:objC];
[self.managedObjectContext insertObject:objD];

不需要,因为initWithEntity:insertIntoManagedObjectContext:已经将对象插入到上下文中。

请注意,您还应该定义从EntityAEntityBEntityCEntityD的反向关系,如果您已经这样做了,我无法从您的问题中看到。

于 2013-07-13T12:28:19.473 回答