Vous devez d'abord ajouter le fichier SQLite à votre projet Xcode - l'emplacement le plus approprié est dans le dossier des ressources. Ensuite, dans votre fichier de code de délégué d'application, dans la méthode appDidFinishLaunching, vous devez d'abord vérifier si une copie inscriptible du fichier SQLite a déjà été créée, c'est-à-dire: une copie du fichier SQLite a été créée dans les utilisateurs dossier de documents sur le système de fichiers de l'iPhone. Si oui, vous ne faites rien (sinon vous l'écraseriez avec la copie Xcode SQLite par défaut)
Si non, alors vous copiez le fichier SQLite là - pour le rendre inscriptible. Voir l'exemple de code ci-dessous pour cela: ceci a été extrait de l'exemple de code des livres SQLite d'Apple où cette méthode est appelée à partir de la méthode appDidFinishLaunching des délégués d'application.
// 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]);
}
}
============
Voici le code ci-dessus dans 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)")
}
}
}
pouvez-vous s'il vous plaît la page d'où vous obtenez le code? Merci. – itsaboutcode
Où devrait être la base de données si vous voulez écrire dessus? Je sais que s'il est dans le groupe Resourses (Main Bundle), il est en lecture seule, alors quelle est la bonne façon de permettre à la fois, l'écriture et la lecture? Merci! –
Je sais que c'est un peu en retard, mais comment pourrais-je trouver si elle a besoin de mise à jour à partir du bundle principal? J'ai essayé de vérifier les attributs de fichier, mais la date de modification du fichier dans l'application change chaque fois que je compile une nouvelle version. – Flipper