2010-10-14 6 views
0

J'ai une entité appelée "Client", et chaque client peut avoir plusieurs "Propriétés". CoreData crée des méthodes sur la classe Client pour moi pour ajouter une nouvelle propriété à l'ensemble, mais je ne comprends pas le but de cela. Y at-il aucune différence entre:Quelle est la bonne façon de créer une nouvelle relation to-many dans CoreData?

Property *newProperty = [NSEntityDescription insertNewObjectForEntityForName:@"Property" inManagedObjectContext:self.managedObjectContext]; 
newProperty.name = @"[New Property]"; 
newProperty.client = self.currentClient; 

et ceci:

Property *newProperty = [NSEntityDescription insertNewObjectForEntityForName:@"Property" inManagedObjectContext:self.managedObjectContext]; 
newProperty.name = @"[New Property]"; 
[self.currentClient addPropertiesObject:newProperty]; 

Pour autant que je sache, ces deux font exactement la même chose; ils associent juste ma nouvelle propriété avec le bon client. L'un est préféré à l'autre; Y a-t-il une différence? Je veux juste m'assurer que je ne manque pas le point entier de la méthode "addPropertiesObject" générée automatiquement. Merci,

Répondre

2

En supposant que la relation est bidirectionnelle (c'est-à-dire que la relation inverse est définie des deux côtés), alors il n'y a pas de différence fonctionnelle entre les exemples que vous présentez. Utilisez celui qui a le plus de sens dans votre code. Si vous êtes concentré sur le Property, utilisez -[Property setClient:]. De même, utilisez -[Client addPropertiesObject:] si votre code se concentre sur le Client.

Pour être complet, vous pouvez également utiliser

Client *client = ... 
Property *property = ... 
[[client mutableSetValueForKey:@"properties"] addObject:property]; 

qui utilise le proxy mutable pour l'à-plusieurs, utilisé dans le codage clé-valeur. Cette dernière option devrait probablement être évitée en faveur des méthodes explicites ci-dessus, car les données de base pourraient optimiser ces méthodes (un détail d'implémentation, je ne sais pas si c'est le cas).

+0

Merci! Je m'en tiendrai à ce que j'avais alors; newProperty.client = self.currentClient, parce que cela semble plus simple, et ce n'est pas une réponse à quelque chose dans une classe ou vue Client. – GendoIkari

Questions connexes