2010-08-30 17 views
10

Tengo una base de datos SQLite en la primera versión de mi aplicación para iPhone (que está en la tienda de aplicaciones). Ahora quiero implementar la segunda versión de la aplicación, que también tiene una base de datos SQLite.¿Cómo mantener los datos en una base de datos SQLite en un iPhone en una actualización de la versión de la aplicación?

Entendí que después de la actualización, la base de datos SQLite se elimina y luego se agrega la nueva. No quiero que esto suceda, ya que esa base de datos contiene cierta información que el usuario ha guardado. No sería bueno si se elimina después de la actualización.

La pregunta es, ¿cómo transfiero los datos de la antigua base de datos SQLite (versión antigua) a la nueva? ¿Y cómo puedo probar el proceso de actualización de la versión que ocurriría en la tienda de aplicaciones?

Cualquier ayuda sería muy apreciada. Gracias.

Respuesta

2

La respuesta es: poner en práctica el control de versiones en su aplicación desde el principio :-)

En este caso, se puede considerar una aplicación sin información de la versión para ser de la versión 1. Lo que yo haría es tienda la versión de la base de datos en alguna parte (probablemente dentro de la misma base de datos). Cuando se abre la base de datos, compruebe su versión con respecto a la versión que espera la aplicación, luego realice los cambios de esquema necesarios y actualice el número de versión almacenada.

Si no ha copiado la base de datos en el directorio de Documentos de la aplicación, entonces esto es discutible porque solo se leería de todos modos. De lo contrario, los contenidos del directorio de Documentos se conservan entre actualizaciones.

Para probar la actualización, simplemente comience con una copia nueva de la versión anterior en su dispositivo. Luego instale el nuevo (compilar y ejecutar funcionará bien). Usted mantiene versiones antiguas de su aplicación, ¿verdad?

+0

Err ... Definitivamente debería mantener versiones anteriores de mi aplicación. Empezaré de ahora en adelante de todos modos. Pero entiendo lo que estás diciendo y parece una muy buena idea. Es un truco para insertar la versión de la aplicación en la base de datos, pero aún así es buena. Entonces, la idea es que cuando la aplicación se lance, revise para ver el número de versión. Si el archivo db tiene un número de versión inferior al de la aplicación en sí, se inician algunas sentencias SQL (como crear una tabla nueva, etc.)) y actualice la versión dentro de la base de datos, para que en el próximo inicio de la aplicación no tenga que actualizar nada nuevamente – Andrei

+0

Correcto, aunque he encontrado que es mejor mantener números de versión separados para la aplicación y la base de datos. De lo contrario, si actualiza la aplicación pero deja la base de datos igual, la aplicación podría aplicar actualizaciones por error a la base de datos. – Brian

2

Esto no es algo que he probado personalmente, pero a lo mejor de mi conocimiento:

  1. de su primera pregunta been answered, y el corto de él es que está fuera de suerte si su sqlite db no se copia en el directorio de Documentos, ya que todo el paquete de la aplicación se reemplazará en la actualización. Suponiendo que christo16 es correcto, y suponiendo que su aplicación ya enviada no hizo copie el db en Documentos, es posible que desee enviar una versión provisional que hace. Entonces solo sería cuestión de asegurarse de que una masa crítica de usuarios haya instalado la versión provisional antes de desplegar las actualizaciones de db.
  2. Re: testing. Debería poder probar el comportamiento de actualización instalando su compilación a través de iTunes en lugar de hacerlo a través de la compilación & Ejecutar. Ha pasado un tiempo desde que lo intenté ... seguir las instrucciones para una compilación ad hoc debería ser el truco, aunque podría ser excesivo.
+0

Gracias ... Supongo que tiene sentido ... pero ¿y si hay un par de cambios en la nueva base de datos? P.ej. en esta nueva versión, agregué una nueva tabla, pero la otra tabla quedó intacta. ¿Cuál sería una buena solución alrededor de esto? – Andrei

Cuestiones relacionadas