Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data CoreData如何管理类关系创建?_Core Data_Entity Relationship - Fatal编程技术网

Core data CoreData如何管理类关系创建?

Core data CoreData如何管理类关系创建?,core-data,entity-relationship,Core Data,Entity Relationship,我有一个在托管上下文中正确定义的实体类。 该类与另一个类具有一对多关系 Xcode 4图形工具正确地创建了派生类,关系由NSSet表示 我想知道如何管理关系类的创建。 我的意思是,为了创建主实体,我使用 NSManagedObject *newEntity = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context]; 但NSSet中的关系如何?我是否需要

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

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=@“就足够了

对于多个关系,NSManagedObject有一个
mutableSetValueForKey:
方法返回您将使用的集合。使用上面定义的
newEntity
child
,您可以执行以下操作:

NSMutableSet *childObjects = [newEntity mutableSetValueForKey:@"childRelationship"];
[childObjects addObject:child];
但是您说您已经让Xcode为您的核心数据实体生成自定义子类,因此您在
父类中定义了一个方便的方法,该方法的名称类似于
addChildObject:
。使用它,您可以用更简单的版本替换上述内容,但您还需要将
newEntity
声明为该子类的实例,而不是一般的NSManagedObject:

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

[parent addChildObject:child];

嗯…谢谢,这就解决了问题,我还注意到Xcode自动为我编写了一些方便的方法,我也会看看。