Comment accéder aux propriétés d'un élément de relation dans Core Data?

Supposons que vous ayez un object Core Data appelé Workshop. Il a une relation to-many avec un object Student.

Comment créer un NSArray des étudiants au sein de l'atelier?

C'est un NSSet opposé à un tableau, car ils ne sont pas ordonnés.

Utilisez mutableSetValueForKey: cela returnne un proxy qui mute la relation et effectue des notifications KVO. Considérez le nom comme "[NS] MutableSet" "valueForKey" plutôt que "mutableSetValue" "forKey", car il returnne un jeu modifiable que vous manipulez

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

la source

Ces relations sont normalement déclarées en tant que NSSet dans votre sous-class NSManagedObject, comme ceci:

 @property (retain) NSSet* students; 

Et il existe également des methods d'accesseur spéciales:

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

Les NSSets sont similaires à NSArrays, mais ils ne sont pas commandés, car datatables de base ne garantissent pas un ordre de sorting spécial pour les objects gérés.

Vous n'avez généralement pas besoin de créer un tableau d'une relation à plusieurs, car ils viennent automatiquement dans un NSSet de toute façon. Cela donne une meilleure flexibilité qu'un tableau.

Toutefois, si vous avez besoin d'élèves sortingés dans un ordre particulier, vous pouvez utiliser un descripteur de sorting pour renvoyer un tableau sortingé. Supposons que vous ayez déjà les instances de WorkShop et que vous vouliez un tableau d'élèves sortingés par nom de famille dans l'ordre décroissant, vous utiliseriez ceci:

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