假设您有一个名为Workshop的Core Data对象。它与Student对象具有多对多关系。
我如何在研讨会内创建学生的NSArray?
答案 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];
答案 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]];