2013-05-02 4 views
0

J'ai apporté beaucoup de modifications à mon modèle de données de base. Dans le passé, nous avons utilisé la migration automatique simple. Cependant, cela échouera cette fois. Comme je ne me soucie pas vraiment de la migration des données, je veux juste supprimer le magasin persistant si la migration automatique échoue et le réinstaller. Est-ce une façon valable d'y aller? Toute chose que je dois faire attention? Cela pourrait-il faire rejeter mon application?Ignorer la migration des données de base

Répondre

1

Il y a quelques problèmes avec cela, et vous devez faire attention. This answer avait quelques bons conseils de la documentation de NSManagedObjectContext

Un contexte a toujours un coordonnateur du magasin persistant « parent » qui fournit le modèle et distribue les requêtes aux différents persistants magasins contenant les données. Sans un coordonnateur, un contexte n'est pas entièrement fonctionnel. Le coordinateur du contexte fournit le modèle objet géré et gère la persistance. Tous les objets extraits d'un magasin externe sont enregistrés dans un contexte avec un identificateur global (une instance de NSManagedObjectID) utilisé pour identifier de façon unique chaque objet dans le magasin externe.

Face à une situation similaire dans l'une de nos applications, je choisi de faire un nouveau magasin persistant et désapprouver l'ancien parce que notre ancien magasin avait été foiré sur plusieurs de nos appareils par une migration mauvaise précédente . Il a fini par être une transition plus désordonnée que je l'avais espéré, mais cela a fonctionné.

Les problèmes avec votre plan ne sont pas insurmontables, je recommande juste la prudence. J'ai aimé le conseil de Giao d'utiliser la réinitialisation de NSManagedObjectContext. Lors de la suppression et de la reconstruction, le coordinateur de magasin persistant peut être confus. Je m'inquiète parce qu'Apple semble faire tellement de choses dans les coulisses. Je m'inquiète aussi car il semble que les données de base se comportent différemment sur les applications publiées que sur nos versions de débogage, en particulier dans le processus de mise à niveau.

Je pense que vous êtes intelligent en reconnaissant que votre automigrate va avoir des problèmes, et que vous êtes à la recherche d'un autre chemin. Dans un passé récent, j'ai vu un groupe qui a vraiment dû se démener pendant un mois pour faire face à une migration de données ayant échoué dans leur application.

+0

Pourriez-vous donner plus d'informations sur les problèmes de mon approche? – kukudas

+0

a modifié ma réponse ci-dessus – HalR

+1

@HalR: La question/réponse à laquelle vous avez lié consiste à vider un magasin persistant qui a déjà été ouvert. J'ai l'impression que la situation ici est beaucoup plus simple: Si 'addPersistentStoreWithType' échoue en raison de problèmes de migration, vous pouvez simplement supprimer le fichier de stockage et appeler' addPersistentStoreWithType' à nouveau. –

Questions connexes