7
votes

Ajout d'un attribut à l'entité dans les données de base

J'ai créé tous mes objets gérés après mapper toutes les entités / attributs / relations dans le modèle de données. Maintenant, j'ai le problème de devoir ajouter des attributs / relations supplémentaires que je n'ai pas pensé lorsque j'ai conçu pour la première fois une de mes entités / classes. Existe-t-il un moyen de modifier ma classe NSManèdeObject existante avec des données de base pour effacer tous mes modèles et les réinsertionner en fonction du nouveau XCDatamodel?

ajoutera l'attribut dans la mise à jour XCDatamodel Le mécanisme de stockage sous-jacent également? Dites si j'utilise SQLite3 comme mon stockage persistant, ajoutera-t-il la colonne en conséquence?


0 commentaires

3 Réponses :


9
votes

Si vous voulez dire "Puis-je modifier mon xcdatamodel et simplement fusionner des modifications du code généré dans mon code existant pour les classes dérivées NSManageDObject", oui, c'est simple. Vous venez de générer le code pour les modèles qui ont changé, puis fusionner les modifications à la main dans les classes dérivées particulières. Étant donné que les changements sonnent comme étant des attributs et des relations supplémentaires, cela devrait être trivial - en fait, vous pouvez probablement utiliser diff et patch pour le faire semi-automatiquement si vos modifications sont vraiment additives de nature.

Cependant, si vous voulez dire que vous devez migrer un magasin existant vers un nouveau schéma, vous avez des travaux de travail devant vous. Il existe certaines conditions (ajoutant des entités orthogonales, des propriétés extraites, etc.) qui ne vous obligeront pas à le faire. Vous vous rendrez compte si vous avez besoin ou non lorsque vous essayez d'ajouter vos magasins persistants existants au coordinateur de magasin persistant pour votre contexte d'objet géré.

Avant de décider de vous lancer dans un changement de schéma, vous devriez toujours lire comment faire Migrations et Versioning dans les données de base - Si vous avez des magasins existants, vous devez conserver. Cela est presque assurément le cas dans les applications qui ont des données utilisateur stockées dans les magasins de données de base. Et à moins que vous disposiez d'un outil d'importation automatisé ou d'un utilitaire de génération de magasin de données, vos magasins statiques existants devraient également avoir besoin de migration.


0 commentaires

0
votes

Vous devez également consulter les modèles de conception de l'écart de génération. Cela vous aidera dans exactement cette situation. ici est un tel Question sur l'utilisation d'un écart de génération avec Coredata.


0 commentaires

10
votes

Comme le souligne Statehog, pour des modifications complexes de votre modèle de données, vous devez créer des versions de votre modèle et migrer les données sous le modèle ancien en le nouveau, après le guide d'Apple sur la question (qu'il lie à). Ne vous inquiétez pas de l'une des scènes SQL, les données principales de SQL qui pour vous.

Toutefois, pour des modifications de modèle de données simples, Apple a introduit une nouvelle fonctionnalité dans l'implémentation iPhone OS 3.0 des données de base appelées Migration légère . Pour la migration lumineuse, les données de base migreront automatiquement à travers des modifications simples dans votre modèle de données, telles que la modification du nom d'un attribut ou une entité, supprimant un attribut, en ajoutant un attribut avec une valeur par défaut ou modifiant l'héritage d'une entité. Il vous suffit de saisir l'identifiant de renommage de la nouvelle version pour indiquer le nom de la version plus ancienne pour quelque chose, etc. Les données de base géreront les mises à jour de vos données de manière efficace, à condition que vous définissiez les options NsmigratPersSompterStoresEOPtion et NsinferMappingMoTomatomatomatomatomatiction votre magasin persistant.


2 commentaires

J'ai trouvé La migration de données de base et la version de la version se remplit assez clairement les blancs laissés dans la documentation d'Apple. Conception> Modèle de données> Ajouter une version modèle dans Xcode était l'étape que j'étais manquante.


Remarque: Pour obtenir la valeur par défaut définie pour les nouveaux attributs des objets existants, vous devez décocher le drapeau "facultatif".