Primero debe agregar el archivo SQLite a su proyecto Xcode; el lugar más adecuado es en la carpeta de recursos.
Luego, en el archivo de código delegado de su aplicación, en el método appDidFinishLaunching, primero debe comprobar si ya se ha creado una copia grabable del archivo SQLite, es decir, se ha creado una copia del archivo SQLite en los usuarios carpeta de documentos en el sistema de archivos del iPhone. En caso afirmativo, no debe hacer nada (de lo contrario lo sobreescribiría con la copia Xcode SQLite predeterminada)
En caso negativo, copie el archivo SQLite allí para que pueda escribirse.
Véase el ejemplo de código siguiente para hacer esto: esto ha sido tomado de ejemplo de código SQLite libros de Apple, donde este método se llama a partir de los delegados de aplicaciones método appDidFinishLaunching.
// Creates a writable copy of the bundled default database in the application Documents directory.
- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"bookdb.sql"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success)
return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bookdb.sql"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
============
Aquí está el código anterior en Swift 2.0+
// Creates a writable copy of the bundled default database in the application Documents directory.
private func createEditableCopyOfDatabaseIfNeeded() -> Void
{
// First, test for existence.
let fileManager: NSFileManager = NSFileManager.defaultManager();
let paths:NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory:NSString = paths.objectAtIndex(0) as! NSString;
let writableDBPath:String = documentsDirectory.stringByAppendingPathComponent("bookdb.sql");
if (fileManager.fileExistsAtPath(writableDBPath) == true)
{
return
}
else // The writable database does not exist, so copy the default to the appropriate location.
{
let defaultDBPath = NSBundle.mainBundle().pathForResource("bookdb", ofType: "sql")!
do
{
try fileManager.copyItemAtPath(defaultDBPath, toPath: writableDBPath)
}
catch let unknownError
{
print("Failed to create writable database file with unknown error: \(unknownError)")
}
}
}
¿Puede agradar a la página desde donde obtiene el código? Gracias. – itsaboutcode
¿Dónde debería estar la base de datos si desea escribir en ella? Sé que si está en el grupo de Resourses (Main Bundle) es de solo lectura, entonces, ¿cuál es la forma correcta de permitir tanto la escritura como la lectura? ¡Gracias! –
Sé que esto es un poco tarde, pero ¿cómo voy a encontrar si es necesario actualizarlo desde el paquete principal? Traté de verificar los atributos del archivo, pero la fecha de modificación del archivo en la aplicación cambia cada vez que compilo una nueva versión. – Flipper