gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:31:48 27 4
gpt4 key购买 nike

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

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: 方法返回您将使用的集合。使用如上定义的 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];

关于core-data - CoreData 如何管理类关系创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6437122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com