我有一个在托管上下文中正确定义的实体类。 这个类与另一个类有一对多的关系。
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 = @“”就足够了?
答案 0 :(得分:3)
对于多对多关系,NSManagedObject具有mutableSetValueForKey:
方法,该方法返回您将使用的集合。如上所述定义newEntity
和child
,您可以执行以下操作:
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];