2010-06-22 22 views
0

J'ai un problème de mappage de la situation suivante de v1 à v2 d'un modèle de données de base.Modèle de mappage de personnalisation de CoreData

En v1 du modèle, j'avais une entité nommée book avec un attribut author. Là, j'ai enregistré le prénom et le nom de l'auteur et même prénom et nom de plusieurs auteurs. Conception très pauvre, je sais, mais c'était comme ça.

Dans v2 du modèle je l'ai fait mieux et ajouté l'auteur de l'entité avec les attributs prénom et nom et une relation à réserver. Est-ce que quelqu'un sait là-bas comment je peux personnaliser le modèle de mappage de telle manière qu'il appelle une fonction (qui renvoie le nombre d'auteurs et le prénom et le nom séparés) et crée les nouvelles entités concernant la sortie de cette fonction?

Merci b00tsy

Répondre

2

Vous commencez par créer un modèle de mappage entre les modèles source et de destination. À partir de là, vous voulez sélectionner l'objet dans le modèle de mappage que vous allez gérer pour gérer cette division. Sur le côté droit de l'éditeur de modèle de mappage, vous verrez où vous pouvez nommer une classe qui est le NSEntityMigrationPolicy. En ajoutant ici une classe de stratégie de mappage personnalisée, vous pouvez indiquer à la migration d'utiliser votre code au lieu du code standard. À partir de là, créez la classe et attribuez-lui la sous-classe NSEntityMigrationPolicy. À l'intérieur de cette classe remplacer la méthode -createDestinationInstancesForSourceInstance: entityMapping: manager: error:. Cette méthode sera appelée une fois par objet et il est de votre responsabilité de créer l'objet de destination et de copier tous les attributs de la source vers la destination. Dans le cadre de cette copie, vous pouvez diviser le nom en prénom et nom de famille par la logique que vous jugez appropriée. À la fin de cette méthode, assurez-vous d'appeler le -associateSourceInstance: withDestinationInstance: forEntityMapping: afin que le NSMigrationManager connaisse l'objet destination nouvellement créé et que le reste de la migration fonctionne correctement. REMARQUE: vous n'avez pas besoin de remplacer les méthodes liées aux relations, à moins que vous n'ayez besoin d'écrire du code personnalisé pour celles-ci.

C'est tout ce qu'il y a à faire.

+0

Merci Marcus. La définition de la classe NSEntityMigrationPolicy manquante était le lien manquant dont j'avais besoin. Avec votre message sur: http://www.mactech.com/articles/mactech/Vol.25/25.03/CoreDataVersioning/index.html Je l'ai fait! Btw. J'aime beaucoup ton blog cimgf.com ... – b00tsy

0

Le Core Data Model Versioning and Data Migration Programming Guide vous montre comment faire la partie la migration. En ce qui concerne la séparation du prénom et du nom de famille, vous pourriez rencontrer un problème. Où séparez-vous prénom/nom? Par des espaces? Qu'en est-il de "Del Torres" et autres? Qu'en est-il des auteurs qui utilisent leurs «seconds prénoms»?

C'est une question difficile à prendre en considération.

+0

Salut Josh, merci pour votre réponse. J'ai les problèmes que vous avez mentionnés en tête et j'ai lu le guide de migration, mais je n'ai pas encore trouvé la réponse, sur la façon d'intégrer une telle fonction dans le modèle de cartographie. Est-ce possible ou devrais-je modifier toutes les entités par une méthode après la migration? par exemple. Je laisse simplement le modèle de mappage faire son travail habituel et ensuite je prends chaque entité d'auteur et je la divise manuellement ... – b00tsy

+0

Cette question générale est traitée dans la section Personnaliser le processus de migration du guide de migration. Vous aurez besoin d'être beaucoup plus précis sur ce que vous rencontrez des problèmes. –