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

时间:2010-11-17 16:38:08

标签: iphone objective-c core-data ios nsarray

假设您有一个名为Workshop的Core Data对象。它与Student对象具有多对多关系。

我如何在研讨会内创建学生的NSArray?

3 个答案:

答案 0 :(得分:2)

这些关系通常在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不保证托管对象的特殊排序顺序。

答案 1 :(得分:1)

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

  

使用mutableSetValueForKey:这个   返回一个变异的代理   关系并做KVO   通知。把名字想象成   “[NS] MutableSet”“valueForKey”而非   比“mutableSetValue”“forKey”,   因为它返回一个可变集   你操纵

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

source

答案 2 :(得分:1)

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

但是,如果您需要按特定顺序排序的学生,则可以使用排序描述符来返回已排序的数组。假设您已经拥有WorkShop实例,并且您想要按降序排序的学生数组,您可以使用:

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