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

前端 未结 3 1727
再見小時候
再見小時候 2021-01-27 05:48

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

How would I create an NSArray of the students within the Workshop?

相关标签:
3条回答
  • 2021-01-27 06:38

    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 讨论(0)
  • 2021-01-27 06:48

    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

    0 讨论(0)
  • 2021-01-27 06:49

    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.

    0 讨论(0)
提交回复
热议问题