Supposons que vous ayez un objet Core Data appelé Workshop. Il a une relation to-many avec un objet Student.Comment accéder aux propriétés d'un élément de relation dans Core Data?
Comment créer un NSArray des étudiants au sein de l'atelier?
Supposons que vous ayez un objet Core Data appelé Workshop. Il a une relation to-many avec un objet Student.Comment accéder aux propriétés d'un élément de relation dans Core Data?
Comment créer un NSArray des étudiants au sein de l'atelier?
Il s'agit d'un NSSet opposé à un tableau, car il n'est pas ordonné.
Utilisation mutableSetValueForKey: Cette retourne un proxy qui mute la relation et fait des notifications KVO . Pensez au nom "[NS] MutableSet" "valueForKey" plutôt que "mutableSetValue" "forKey", parce qu'il renvoie un ensemble mutable que vous manipuler
NSMutableSet *Students; Students = [Workshop mutableSetValueForKey: @"Students"]; [Students addObject: newStudent]; [Students removeObject: oldStudent];
Ces relations sont normalement déclarées comme NSSet
dans votre sous-classe NSManagedObject, comme ceci:
@property (retain) NSSet* students;
Et il y a aussi quelques méthodes accesseurs spéciales:
- (void)addStudentsObject:(NSManagedObject *)value;
- (void)removeStudentsObject:(NSManagedObject *)value;
- (void)addStudents:(NSSet *)value;
- (void)removeStudents:(NSSet *)value;
NSSets sont similaires à NSArrays, mais ils ne sont pas commandés car Core Data ne garantit pas un ordre de tri spécial pour les objets 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 triés dans un ordre particulier, vous pouvez utiliser un descripteur de tri pour renvoyer un tableau trié. Supposons que vous ayez déjà les instances de WorkShop et que vous vouliez un tableau d'élèves triés par nom de famille en ordre décroissant, vous utiliserez ceci:
WorkShop *aWorkShop=//... fetch the appropiate WorkShop instances
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:NO];
NSArray *sortedStudents=[aWorkShop.students sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];