pérdida de datos de la aplicación en la actualización de la versión

aunque esta es una pregunta más antigua que hacer, pero no obtuve ninguna solución adecuada para esto. Es por eso que estoy pidiendo ayuda sobre este tema.

Tengo una aplicación para iPhone, que contiene una database sqlite en su carpeta de resources. Ahora, cuando lo actualizo a la versión posterior de iTunes, se pierden todos los datos de la database.

Supongamos que un usuario ingresó 1000 inputs en la database. Entonces, si perdió sus datos en caso de actualizar la aplicación desde iTunes, definitivamente no le va a encantar actualizar la versión de su aplicación. Luego se le debe notificar primero que "perderá todos sus datos anteriores" o que los datos anteriores se mantendrán sin cambios en la nueva versión.

¿Qué procedimiento debo seguir en la nueva versión para conservar todos los datos antiguos en la nueva versión …?

No puedo modificar las versiones anteriores. Entonces, tengo que hacer algo en la última versión para que todos los datos de la versión anterior se mantengan en este nuevo.

Este es un problema de emergencia. Los usuarios están actualizando la aplicación y están perdiendo sus datos previamente almacenados en la database. Incluso no se les notifica que perderán todos los datos. !

Cuando no utilice Core Data, la única forma de conservar los datos de usuario es almacenar su database en el directory de documentos del usuario y en el directory de la biblioteca .

Documentos

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"UserData.sqlite"]]; 

Biblioteca

 [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

Estos también son los únicos directorys de escritura accesibles para su aplicación. Si ha incluido una database "en blanco" en su carpeta de Recursos , se copy en el package. A partir de ahí, debe verificar si la database existe en el directory de documentos , de lo contrario, copyrla del package.

Esta es la única manera de garantizar que los datos estén protegidos en las actualizaciones de la aplicación.

En otra nota, si el usuario no hace una copy de security de su dispositivo, desinstala la aplicación y luego vuelve a instalar la aplicación, los datos desaparecerán.

En lo que respecta a que el usuario no sea notificado, perderá sus datos, lo único que incitará al usuario sobre la pérdida de datos es cuando decidan eliminar la aplicación del dispositivo, o si implementa alguna forma de notificar al usuario sobre cualquier cambio de datos

¿Dónde almacenas tus datos? Se supone que debe hacerlo en el directory Documents de su package de aplicaciones. Otros directorys, luego Documents y Library , no se conservan durante las actualizaciones de la aplicación (Durante la actualización, su aplicación se instala realmente en otro directory y sus datos se copyn nuevamente).

Aquí hay una buena descripción del sistema de files iOS: Directorios estándar de iOS: Dónde residen los files (Guía de progtwigción del sistema de files)

Puede usar un file sqlite db por separado para los datos del usuario que no debe perder.

PD: cuando se está descargando una nueva actualización desde App Store. iOS mueve files antiguos a otra carpeta. Cuando la descarga y la installation completan, iOS mueve los files antiguos a la carpeta de la aplicación.

Si hubiera configurado el número de versión en su database para su iPhone, podría haberlo manipulado fácilmente, guarde su número de versión en su database y cuando se llame a la database, compare la versión con la versión esperada

Si la new version > older version cambia el esquema (esto es necesario si hubiera cambiado el esquema de su database) con el uso de sentencias SQL ALTER y actualice el número de versión de la aplicación.

Por lo tanto, cada vez que el usuario va a actualizar o una installation nueva, comprobará la nueva versión con su versión anterior, si difiere entonces el esquema de actualización, y si no es necesario realizar cambios.

Si no hubiera realizado ningún cambio relacionado con el esquema (por ejemplo, agregando una nueva columna …), entonces no tiene que preocuparse, el usuario no perderá los datos.