Question

J'essaie de transférer une version mise à jour de ma base de données sqlite sur mon appareil et je n’ai pas trouvé le moyen de le faire autrement que de le renommer à chaque fois (douloureux). La copie obsolète (en cache?) Reste en permanence sur le périphérique.

Je comprends comment obtenir une version mise à jour dans le simulateur en effaçant le dossier / applications, mais cela ne semble pas affecter le périphérique physique.

Des suggestions?

Était-ce utile?

La solution

Si le fichier de base de données fait partie de votre ensemble d'applications lorsque vous mettez à jour l'application, vous mettrez à jour la base de données.

Si la base de données ne fait pas partie de l'ensemble d'applications, mais se trouve dans un espace en lecture-écriture (comme le répertoire des documents), vous devrez mettre en œuvre votre propre stratégie.

J'inclus une table schema_version dans ma base de données:

create table schema_version (
  version integer not null
);

puis au démarrage de l'application, je vérifie la version actuelle, puis je cherche dans mon répertoire d'application un fichier update-schema- [N + 1] .sql à appliquer en tant que mise à jour. Donc, si ma version de schéma est 4, je vérifierai update-schema-5.sql, etc.

Sachez que les performances en écriture de sqlite sur l’iphone ne sont pas si bonnes. Si vous avez besoin de mettre à jour 200 000 lignes de base de données, vous devrez probablement trouver un moyen de divertir l'utilisateur pendant qu'il est en cours.

Mon application utilise une approche hybride dans laquelle nous avons la majorité (60 Mo) de nos données dans une base de données en lecture seule et une base de données en lecture-écriture plus petite pour le contenu mis en cache par les utilisateurs et mis en cache.

Autres conseils

Vous pouvez écrire une application de ligne de commande OS X pour "diff" l'ancienne et la nouvelle base de données. Envoyez ensuite au périphérique un objet JSON (ou XML) de tous les ajouts, suppressions et mises à jour et appliquez-les au magasin existant.

Vous pouvez également copier votre boutique dans le dossier Documents lors de la première exécution de l'application et la lire à partir de là. Le dossier Documents a un accès en lecture / écriture / suppression, je pense donc que vous pouvez simplement insérer le nouveau dans. Vous pouvez obtenir ce chemin comme ceci.

NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory,
            NSUserDomainMask,
            YES);

NSString *docDir = [arrayPaths objectAtIndex:0];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top