2009-02-16 12 views
9

Estoy usando sqlite como fuente de datos en una aplicación de iPhone. Tengo dos preguntas con respecto a las actualizaciones de la aplicación.Implementando sqlite DB en la actualización de la aplicación de iPhone

1.) Los datos son todos config/nontransactional. Es decir, es de solo lectura. Cuando actualizo/agregue datos de configuración, emitiré una actualización para la aplicación. Cuando un usuario obtiene una aplicación de iPhone actualizada, ¿se desinstala el original? Si ese es el caso, estoy bien porque se implementarán los nuevos datos de configuración db. Si ese no es el caso, ¿cómo reemplazo los datos?

2.) Los datos son config y transaccionales. Lo que significa que el usuario puede guardar datos en el db. Cuando el usuario se actualiza a una nueva versión de la aplicación, quiero mantener sus datos existentes pero reemplazar todos los datos de configuración. Supongo que necesitaría tener scripts INSERT y UPDATE almacenados dentro de la aplicación para lograr esto. ¿Cuál es una forma eficiente de hacerlo?

+0

¿Estás diciendo que estás instalando MySQL en el iPhone? Dudo seriamente que pueda funcionar. ¿O está diciendo que el iPhone está consultando una base de datos MySQL en algún servidor? –

+0

Sí, mysql está en el iPhone, que es un escenario común. Para ser explícito, la pregunta es para los desarrolladores de iPhone. – 4thSpace

+0

SQLite es un escenario común en un iPhone (está integrado). Usar MySQL es una locura. –

Respuesta

11

cdespinosa ha descrito bien el escenario # 1, así que abordaré el # 2.

Todavía no he hecho esto en el iPhone, pero en un entorno de escritorio la forma más fácil de manejar esto es mantener los datos de configuración en una base de datos separada. Puede adjuntar a múltiples bases de datos con bastante facilidad. Comience abriendo su base de datos principal, que probablemente debería ser la base de datos que puede cambiar. Entonces sqlite3_exec una declaración ATTACH, que se ve así:

ATTACH 'filepath' AS config; 

A partir de entonces, se puede hacer algo como esto:

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

Es mi entendimiento de que si se escribe en la base de datos de configuración de la aplicación se falle una comprobación de firma y no se iniciará, y la versión de SQLite incluida con el iPhone tiene la edad suficiente para no admitir la marca de solo lectura. Por esta razón, debe copiar su archivo de base de datos de configuración en la zona de pruebas y abrir esa copia en lugar de la que está en su paquete.

(Puede, por supuesto, usar SQL y copiar los valores de una base de datos a otra. Pero si ya está copiando toda la base de datos de configuración a su entorno ... y debería ... entonces eso es solo un paso extra. Solo adjunte.)

Espero que alguien más pueda proporcionarle más detalles. :)

5

Cuando el usuario actualiza la aplicación, el paquete de la aplicación anterior se desinstala y se instala el nuevo paquete de la aplicación, pero los datos del usuario asociados con el paquete de la aplicación están intactos.

Así que sus opciones son a) dejar sus datos en el paquete de la aplicación (será reemplazado automáticamente) ob) copiarlo unilateralmente en el área de datos del usuario en la primera ejecución (por lo que lo reemplazará intencionalmente en la actualización)

Dejaré el n. ° 2 a una persona que tenga conocimientos de sqlite, pero es posible que desee utilizar la etiqueta "sqlite" en lugar de la etiqueta "mysql" si eso es lo que realmente está haciendo.

+0

Sí, se actualizó la etiqueta. No creo que la opción a funcione, ya que el usuario también ha acumulado datos en el momento en que está listo para actualizar. Si elijo la opción b, ¿de dónde se copió el db si no el paquete?Además, no puedo "reemplazar" los datos del usuario. Solo datos de configuración (no usuario). Gracias. – 4thSpace

Cuestiones relacionadas