2017-05-25 1 views
0

Je développe ma propre application et j'ai un problème avec les données de base: J'ai soumis ma première application à l'AppStore et pour la prochaine version, j'ai fait des changements dans le Modèle (de nouvelles entités ont été ajoutées et quelques attributs d'entités existantes ont été supprimés, ajoutés ou mis à jour). L'erreur que j'ai faite est de ne pas créer une nouvelle version du modèle, j'ai juste fait les changements. Maintenant, lorsque j'utilise la première version de l'application et que je passe à la seconde, l'application se bloque car le Core Data Model a changé. Je ne peux pas effectuer de migration car le modèle n'est pas versionné, donc je n'ai pas de version précédente.Reconstruire CoreData après les changements dans le Modèle sans version

Mon idée est, lorsque l'application est lancée pour la première fois, supprimer le modèle de données laisser l'application pour le créer à nouveau (il n'y a pas de problème avec la perte de données).

J'ai vu beaucoup d'idées: Stack Overflow 1 Stack Overflow 2

mais ne fonctionnent pas, parce qu'ils ne peuvent pas trouver mon dossier, c'est mon code:

let documentsDirectory = URL(string: applicationDirectoryPath())! as NSURL 
    // I've tried many names as: Model.sqlite, Database.sqlite, database.sqlite 
    let storeURL = documentsDirectory.appendingPathComponent("model.sqlite") 
    do 
     { 
      try FileManager.default.removeItem(at: storeURL!) 
     } catch 
     { 
      print("Problem deleting core data") 
     } 

Comment puis-je trouver le nom du fichier à mettre à cette fonction

appendingPathComponent("I don't know the name of the file")

Comment puis-je faire de la coda? Une autre idée?

Merci pour tout!

+0

Y at-il une raison que vous ne pouvez pas la version du modèle de CD pour votre mise à jour? – beyerss

+0

Oui c'est, je ne savais pas que je devais le faire .. @beyerss –

+0

Je suppose que ce que je veux dire c'est que même si la première version n'avait pas de version, je * pense * que vous pourriez ajouter une version au modèle de CD pour cette nouvelle version. En supposant qu'ils sont de petits changements, la migration de poids léger serait alors lancée et vous seriez en mesure de mettre à jour sans erreurs. Je ne suis pas au courant d'un autre moyen de le faire - mais je ne suis pas un expert en CoreData, donc si l'ajout d'une version n'est pas une option, vous pouvez attendre que quelqu'un avec plus d'expérience de CD arrive. , vous allez avoir le même problème avec chaque mise à jour si vous n'utilisez pas le versioning. – beyerss

Répondre

0

Ce tutoriel contient des exemples de migration ainsi que les étapes d'ajout d'une seconde version du modèle de CD. Si les modifications apportées au CD sont faibles, vous n'aurez aucun travail à effectuer pour que la mise à jour se déroule correctement. Dans le cas contraire, des travaux seront nécessaires pour mapper l'ancienne structure de données à la nouvelle structure de données afin que les données ne soient pas perdues.

https://www.raywenderlich.com/145860/core-data-migrations-tutorial-lightweight-migrations-2