33 votes

Où placeriez-vous votre fichier de base de données SQLite dans une application iPhone?

Quand j'ai d'abord créer une base de données SQLite fichier avec pré-inséré des ensembles de données pour mon application, je dois placer ce fichier quelque part dans mon projet Xcode pour qu'il aille à mon application iPhone. Je suppose que les "ressources" est le bon endroit pour cela.

Quelles sont les "mesures" pour le déploiement d'une base de données SQLite fichier dans une application iPhone?

  • la création de la base de données manuellement
  • ajout du fichier de base de données pour le projet (où?)

Je suis en train de lire l'ensemble de SQLite documentation, même si ce n'est pas beaucoup iPhone liés.

71voto

Raj Points 4661

Vous devez ajouter le fichier SQLite pour votre projet Xcode premier le lieu le plus approprié est dans le dossier de ressources.

Puis dans votre application délégué fichier de code, dans le appDidFinishLaunching méthode, vous devez d'abord vérifier si une écriture copie du fichier SQLite a déjà été créé, à savoir: une copie du fichier SQLite a été créé dans le dossier de documents sur l'iPhone, le système de fichiers. Si oui, vous n'avez rien faire (sinon vous écraser avec la valeur par défaut Xcode SQLite copie)

Si non, alors vous copiez le fichier SQLite-il à rendre accessible en écriture.

Voir ci-dessous l'exemple de code pour le faire: cela a été pris à partir d'Apple SQLite livres de code de l'échantillon où cette méthode est appelée à partir de la demande des délégués appDidFinishLaunching méthode.

// 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]);
    }
}

6voto

Willi Ballenthin Points 2768

Si vous ne faites que rechercher des données, vous devriez pouvoir les laisser dans le paquet principal.

Ceci, cependant, n'est probablement pas une bonne pratique. Si vous étendez votre application à l'avenir pour permettre l'écriture de bases de données, vous devrez tout réécrire ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X