如何获取 Core Data 中的关系项属性?

Posted

技术标签:

【中文标题】如何获取 Core Data 中的关系项属性?【英文标题】:How to get at a relationship items properties in Core Data? 【发布时间】:2010-11-17 16:38:08 【问题描述】:

假设您有一个名为 Workshop 的核心数据对象。它与 Student 对象具有一对多关系。

如何在 Workshop 中创建学生的 NSArray?

【问题讨论】:

【参考方案1】:

这些关系通常在您的 NSManagedObject 子类中声明为 NSSet,如下所示:

@property (retain) NSSet* students;

还有一些特殊的访问器方法:

- (void)addStudentsObject:(NSManagedObject *)value;
- (void)removeStudentsObject:(NSManagedObject *)value;
- (void)addStudents:(NSSet *)value;
- (void)removeStudents:(NSSet *)value;

NSSets 类似于 NSArrays,但它们没有排序,因为 Core Data 不保证托管对象的特殊排序顺序。

【讨论】:

【参考方案2】:

这是一个与数组相对的 NSSet,因为它们是无序的。

使用 mutableSetValueForKey: 这个 返回一个改变 关系和做KVO 通知。把名字想象成 "[NS]MutableSet" "valueForKey" 而不是 比 "mutableSetValue" "forKey", 因为它返回一个可变集 你操纵

NSMutableSet *Students;
Students = [Workshop mutableSetValueForKey: @"Students"];
[Students addObject: newStudent];
[Students removeObject: oldStudent];

source

【讨论】:

【参考方案3】:

您通常不需要创建一对多关系的数组,因为无论如何它们都会自动进入 NSSet。这比数组提供了更好的灵活性。

但是,如果您需要按特定顺序对学生进行排序,则可以使用排序描述符返回排序后的数组。假设您已经有 WorkShop 实例,并且您想要一个按姓氏降序排列的学生数组,您可以使用:

WorkShop *aWorkShop=//... fetch the appropiate WorkShop instances
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:NO];
NSArray *sortedStudents=[aWorkShop.students sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

【讨论】:

以上是关于如何获取 Core Data 中的关系项属性?的主要内容,如果未能解决你的问题,请参考以下文章

IOS/objective-c/core-data:如何从相关实体获取属性

如何快速获取 Core Data 中的关系

如何使用 Core Data 中多个实体的属性获取属性值?

如何管理 Core Data 中的一对多关系?

根据 Swift Core Data 中的关系获取与特定实体相关的所有条目

如何在Core Data中使用带有fetchRequest的谓词