开发者

How to get at a relationship items properties in Core Data?

开发者 https://www.devze.com 2023-01-25 08:00 出处:网络
Say you have a Core Data object called Workshop. It has a to-many relationship to a Student object. How would I c开发者_开发技巧reate an NSArray of the students within the Workshop?These relationship

Say you have a Core Data object called Workshop. It has a to-many relationship to a Student object.

How would I c开发者_开发技巧reate an NSArray of the students within the Workshop?


These relationships are normally declared as an NSSet in your NSManagedObject subclass, like this:

@property (retain) NSSet* students;

And there's also some special accessor methods:

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

NSSets are similar to NSArrays, but they are not ordered, since Core Data does not guarantee a special sort order for managed objects.


It's a NSSet opposed to an array, as they are unordered.

Use mutableSetValueForKey: This returns a proxy that mutates the relationship and does KVO notifications. Think of the name as "[NS]MutableSet" "valueForKey" rather than "mutableSetValue" "forKey", because it returns a mutable set that you manipulate

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

source


You usually have no need to create an array of a to-many relationship because they automatically come in a NSSet anyway. This gives better flexibility than an array.

However, if you need students sorted in a particular order you can use a sort descriptor to return a sorted array. Suppose you already have the WorkShop instances and you wanted an array of students sorted by last name in descending order, you would use this:

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

精彩评论

暂无评论...
验证码 换一张
取 消