CoreData如何管理类关系创建?

时间:2011-06-22 08:40:23

标签: core-data entity-relationship

我有一个在托管上下文中正确定义的实体类。 这个类与另一个类有一对多的关系。

Xcode 4图形工具正确创建了派生类,并且该关系由NSSet表示。

我想知道如何管理关系类的创建。 我的意思是,为了创建主要实体,我正在使用

NSManagedObject *newEntity = [NSEntityDescription
insertNewObjectForEntityForName:@"EntityName"
inManagedObjectContext:context];

但是NSSet中的关系怎么样?我是否需要以与父实体相同的方式创建它并将其定期存储在NSSet中?

NSManagedObject *child = [NSEntityDescription insertNewObjectForEntityForName:@"ChildName" inManagedObjectContext:context];

NSSet *childSet = [..set creation with child..];
newEntity.child = childSet;

// save newEntity in context

如果是,因为NSSet是一个对象,为什么不需要从上下文开始创建?这个问题可以应用于实体中的所有“普通”属性,NSString也是一个对象,为什么简单的newEntity.prop = @“”就足够了?

1 个答案:

答案 0 :(得分:3)

对于多对多关系,NSManagedObject具有mutableSetValueForKey:方法,该方法返回您将使用的集合。如上所述定义newEntitychild,您可以执行以下操作:

NSMutableSet *childObjects = [newEntity mutableSetValueForKey:@"childRelationship"];
[childObjects addObject:child];

但是你说你让Xcode为你的核心数据实体生成了自定义子类,所以你有一个在Parent类中定义的方便方法,其名称类似于addChildObject:。使用它可以用更简单的版本替换上面的内容,但是您还需要将newEntity声明为此子类的实例而不是通用的NSManagedObject:

Parent *parent = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context];
NSManagedObject *child = [NSEntityDescription insertNewObjectForEntityForName:@"ChildName" inManagedObjectContext:context];

[parent addChildObject:child];
相关问题