如何获取 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:如何从相关实体获取属性