Как получить свойства элементов отношения в Core Data? - PullRequest
0 голосов
/ 17 ноября 2010

Скажем, у вас есть объект Core Data под названием Workshop.Он имеет отношение ко-многим к объекту Student.

Как бы я создал NSArray для учащихся в рамках Workshop?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Эти отношения обычно объявляются как NSSet в вашем подклассе NSManagedObject, например:

@property (retain) NSSet* students;

И есть также несколько специальных методов доступа:

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

NSSets аналогичны NSArrays, но они не упорядочены, поскольку Базовые данные не гарантируют специальный порядок сортировки для управляемых объектов.

1 голос
/ 18 ноября 2010

Обычно вам не нужно создавать массив отношений «многие-многие», потому что они все равно автоматически входят в NSSet. Это дает лучшую гибкость, чем массив.

Однако, если вам нужно, чтобы студенты сортировались в определенном порядке, вы можете использовать дескриптор сортировки, чтобы вернуть отсортированный массив. Предположим, что у вас уже есть экземпляры WorkShop и вы хотите, чтобы массив студентов сортировался по фамилии в порядке убывания, вы должны использовать это:

WorkShop *aWorkShop=//... fetch the appropiate WorkShop instances
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:NO];
NSArray *sortedStudents=[aWorkShop.students sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
1 голос
/ 17 ноября 2010

Это NSSet, противоположный массиву, поскольку они неупорядочены.

Использовать mutableSetValueForKey: это возвращает прокси, который мутирует отношения и делает КВО уведомления. Думайте о названии как "[NS] MutableSet" "valueForKey" скорее чем "mutableSetValue" "forKey", потому что он возвращает изменчивый набор, который вы манипулируете

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

источник

...