Question

J'utilise SQLite comme source de données dans une application iPhone. J'ai deux questions concernant les mises à niveau de l'application.

1). Les données sont tout config / non transactionnelle. Signification, il est en lecture seule. Lorsque je mets à jour / ajouter des données de configuration, j'émets une mise à niveau pour l'application. Lorsqu'un utilisateur obtient une application iPhone mise à jour, l'original se-t désinstallés? Si tel est le cas, je suis ok parce que les nouvelles données de configuration db seront déployées. Si ce n'est pas le cas, comment puis-je remplacer les données?

2). Les données sont config et transactionnel. Signifie que l'utilisateur peut enregistrer des données dans la db. Lorsque les mises à niveau des utilisateurs vers une nouvelle version de l'application, je veux conserver leurs données existantes, mais remplacer toutes les données de configuration. Je devine que je besoin d'avoir des scripts INSERT et UPDATE stockées dans l'application pour y parvenir. Ce qui est un moyen efficace d'aller à ce sujet?

Était-ce utile?

La solution

cdespinosa a décrit le scénario # 1, donc je vais aborder # 2.

Je ne l'ai pas fait cela sur l'iPhone encore, mais sur un environnement de bureau la meilleure façon de gérer cela est de garder vos données de configuration dans une base de données séparée. Vous pouvez joindre à plusieurs bases de données assez facilement. Commencez par ouvrir votre base de données principale, qui devrait probablement être la base de données qui peut changer. Puis sqlite3_exec une déclaration ATTACH, qui ressemble à ceci:

ATTACH 'filepath' AS config;

A partir de là, vous pouvez faire quelque chose comme ceci:

SELECT * FROM UserTableName;
SELECT * FROM config.ConfigurationTableName;

Je crois comprendre que si vous écrivez à la base de données de configuration de l'application échouera une vérification de signature et ne démarre pas, et la version de SQLite inclus avec l'iPhone est assez vieux pour ne pas soutenir la lecture seule drapeau. Pour cette raison, vous devez copier votre fichier de base de données de configuration dans le bac à sable et ouvrir cette copie au lieu de celui de votre paquet.

(Vous pouvez, bien sûr, utilisez SQL et de copier les valeurs d'une base de données à l'autre. Mais si vous copiez déjà toute la base de données de configuration à votre bac à sable ... et vous devriez être ... alors c'est juste un étape supplémentaire. Il suffit de joindre.)

J'espère que quelqu'un d'autre peut vous fournir plus de détails. :)

Autres conseils

Lorsque l'utilisateur met à jour l'application, l'ancien paquet d'application est désinstallée et le nouveau paquet d'application est installée, mais les données utilisateur associées à l'ensemble de l'application est intacte.

Ainsi, vos choix sont à un) laisser vos données dans le paquet de l'application (il sera remplacé automatiquement) ou b) copier de manière unilatérale à la zone de données d'utilisateur à la première exécution (de sorte que vous allez remplacer volontairement sur la mise à niveau) .

Je vais laisser # 2 à une personne sqlite-knowledgable, mais vous pouvez utiliser la balise « sqlite » au lieu de la balise « mysql » si c'est ce que vous faites réellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top