在核心数据中存储相关实体

时间:2013-07-13 12:18:54

标签: ios core-data

我对核心数据不熟悉,如果有人可以提供反馈/暗示我给定的要求,那就太棒了。

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];

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

感谢您宝贵的时间。

1 个答案:

答案 0 :(得分:0)

此:

objC.objB = objC;

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

objC.objB = objB;

此:

objD.objB = objB;

是正确的,并确定objDobjB之间的关系。

这些电话:

[self.managedObjectContext insertObject:objB];
[self.managedObjectContext insertObject:objC];
[self.managedObjectContext insertObject:objD];
因为initWithEntity:insertIntoManagedObjectContext:已经存在,所以不需要

将对象插入上下文。

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