2012-08-07 13 views
5

He leído las pautas de almacenamiento de datos de Apple y estoy realmente confundido en cuanto a dónde debo guardar los archivos de la base de datos sqlite que estoy creando en mi aplicación. Quiero leer de los archivos sqlite incluso cuando la aplicación está en el modo Offfline. Leí que esos archivos creados deberían guardarse en la Biblioteca/cachés con el indicador "do not backup" establecido. Por favor sugiérame el enfoque correcto para hacer lo mismo.¿Debo escribir el archivo de base de datos sqlite en el directorio de Documentos o en la Biblioteca/Cachés?

Respuesta

5

La respuesta depende de cómo se crean los archivos de base de datos:

According to the Data Storage Guidelines page:

  1. Sólo los documentos y otros datos que son generados por los usuarios, o que no pueden de otra manera ser recreada por su aplicación , debe almacenarse en el directorio /Documents y automáticamente será respaldado por iCloud con .

  2. Los datos que se pueden descargar de nuevo o regenerar deben almacenarse en el directorio/Library/Caches. Los ejemplos de archivos que debe colocar en el directorio de Caches incluyen archivos de caché de base de datos y contenido descargable, como el utilizado por la revista, periódico, y aplicaciones de mapas.

Esto parece relativamente claro para mí: si su aplicación mediante programación crea algo o genera datos que desea guardar, lo puso en la carpeta "Caches". Si se trata de algo único que generan los propios clientes (escribiendo en un teclado o algo que intervinieron manualmente y lo hicieron), colóquelo en "Documentos".

"No hacer copia de seguridad" significa que los archivos nunca se envían a iCloud y, si se pierden, se deben volver a crear desde cero (o volver a instalar).

+0

He desarrollado una aplicación completamente estática. Estoy almacenando datos de más de 4 mb de tamaño. Sin este contenido, la aplicación no funcionará. En mi caso, ¿dónde debo guardar la base de datos local (carpeta de documentos o carpeta de la biblioteca) – Warrior

+0

[Bueno, veo que ya lo ha hecho como una pregunta separada] (http://stackoverflow.com/questions/16767861/where-to- save-the-local-db-created-for-iphone-app), entonces yo (u otra persona) buscaré la respuesta por usted –

+0

¿Qué hay de las nuevas extensiones y reloj? –

1

Esto puede ayudarlo. Copiar la base de datos en el directorio de documentos será lo suficientemente bueno. Los archivos del paquete son de solo lectura. En algunas situaciones. Si necesita actualizar en cualquier momento, la mejor manera es copiar la base de datos al principio si no existe en el directorio de documentos.

El código de ejemplo para la copia de la base de datos de los documentos del directorio es el siguiente:

-(void) checkAndCreateDatabase { 

    // Setup some globals 
    NSString *databaseName = @"AnimalDatabase.sql"; 

    // Get the path to the documents directory and append the databaseName 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 


    // Check if the SQL database has already been saved to the users phone, if not then copy it over 
    BOOL success; 

    // Create a FileManager object, we will use this to check the status 
    // of the database and to copy it over if required 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    // Check if the database has already been created in the users filesystem 
    success = [fileManager fileExistsAtPath:databasePath]; 

    // If the database already exists then return without doing anything 
    if(success) return; 

    // If not then proceed to copy the database from the application to the users filesystem 

    // Get the path to the database in the application package 
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; 

    // Copy the database from the package to the users filesystem 
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; 

    [fileManager release]; 
} 

Usted puede remitir este Tutorial Los archivos, contenidos en los documentos de directorio es leído, el modo de escribir, para que pueda leer el contenido de la base de datos.

Cuestiones relacionadas