CoreData – Dupliquer un object existant

Salut voudrais dupliquer un object de mes données de base db. En ce moment j'utilise

movement2 = [NSEntityDescription insertNewObjectForEntityForName:@"Movement" inManagedObjectContext:self.managedObjectContext]; movement2.name = movement.name; movement2.value = movement.value; movement2.date = movement.date; ... 

et il fonctionne. mais…

Est-il possible de copyr toutes les valeurs de movement à movement2 , dans une ligne de code?

NSManagedObject, contrairement à NSObject, fournit une API pour itérer sur ses attributes et relations. Ou plutôt, c'est la description de l'entité. Ce n'est pas un one-liner, cependant.

 movement2 = [NSEntityDescription insertNewObjectForEntityForName:@"Movement" inManagedObjectContext:self.managedObjectContext]; NSEntityDescription *entity = [movement entity]; for (NSSsortingng *propertyName in [entity propertiesByName]) { [movement2 setValue:[movement valueForKey:propertyName] forKey:propertyName]; } 

Voir la documentation pour plus de détails.

Cela suffira pour cloner la plupart des objects. Si la structure de la database est correcte, copiant les relations de cette façon, leurs relations inverses seront également mises à jour. Donc, si votre Mouvement a une relation avec, disons, MovementDirection, et MovementDirection a une relation parentMovements -1-inverse inverse, cet set parentMovements aura à la fois movement et movement2 intérieur après avoir appelé le code ci-dessus.

Il n'y a aucune méthode dans l'API pour copyr NSManagedObjects , car ils ne sont pas conforms à NSCopying , ni à NSCoding . Cela est logique étant donné que vous ne savez pas très bien comment vous voudriez copyr un tel object s'il a des relations: devrait-il avoir des relations avec les mêmes objects, ou des copys de ceux-ci? Qu'en est-il de ces copys? Ce sont des questions difficiles dont les réponses dépendent probablement de la nature des relations (to-many ou to-one), et donc des cas d'utilisation spécifiques des Core Data.

Donc, une réponse courte: je ferais ce que vous faites dans votre extrait, ou peut-être écrire une méthode pour faire une copy. Il semblerait que votre NSManagedObject ne possède que des attributes simples et aucune relation, ce qui devrait être simple.