2010-11-17 6 views

Répondre

1

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]; 

source

2

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.

1

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]]; 
Questions connexes