Con este post mostraré como podemos copiar un archivo, que previamente hemos añadido a nuestro proyecto, a la carpeta documentos de nuestra aplicación. La idea es la de poder inicializar de una manera rápida y cómoda la base de datos, algún archivo de configuración que tengamos o cosas por el estilo que tenemos que guardar en la carpeta documentos de la aplicación porque durante ejecución sufrirán cambios realizados por el usuario, evitando así tener que crearlos desde el código de la aplicación.
Primero, lo que tenemos que hacer es añadir ese archivo al proyecto para tener acceso a él desde el código cuando se ejecuta la aplicación. Añadid el archivo a la carpeta “Resources” del proyecto.
Una vez tenemos el archivo en el proyecto, podemos añadir el código para copiar el archivo a la carpeta documentos, añadid el siguiente código en vuestro AppDelegate, podéis crearos una función nueva para inicializar los archivos que necesiteis, o añadirlo directamente al init del AppDelegate.
// Copy init.sqlite from resources to the Documents folder in bundle NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"data.sqlite"]; if(![[NSFileManager defaultManager] fileExistsAtPath:storePath]) { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"init" ofType:@"sqlite"]; NSData *myData = [NSData dataWithContentsOfFile:filePath]; if (![myData writeToFile:storePath atomically:YES]) { NSLog(@"ERROR writting the starting database"); } }
En el ejemplo anterior usamos un archivo, init.sqlite, como base de datos inicial para nuestra aplicación y guardamos el mismo archivo bajo el nombre de data.sqlite en el directorio documentos de nuestra aplicación. Daos cuenta también de que usamos un if para comprobar si el archivo existe o no, de forma que sólo se ejecutará la primera vez que ejecutemos la aplicación, ésto es así, para que cuando nuestro usuario vaya añadiendo datos no se los borremos y carguemos siempre la base de datos inicial. Si durante las pruebas queréis volver a obtener el archivo original, eliminad la aplicación del iPhone o del iPhone Simulator.
El método applicationDocumentsDirectory es la siguiente función que nos devuelve la ruta a la carpeta.
/** Returns the path to the application's Documents directory. */ - (NSString *)applicationDocumentsDirectory { return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; }
Great article. Very informative. Will be looking out for more from you from now on. Web Design Company