Main Contents

[Objective-c] Pré-remplir une base CoreData sur iPhone

octobre 30, 2010

Alors, voilà un problème que j’ai mis du temps à résoudre. Et comme souvent c’est finalement très simple.

Avec CoreData, on peut manipuler facilement les enregistrements d’une base de données. Mais la question était comment avoir déjà les infos en base au lancement de l’application.
Je ne voulais pas avoir un fichier CSV ou XML et être obligé de le parser à chaque ouverture.

Et bien, il suffit de créer votre base au format sqlite (voir mon tuto), évidemment la même structure que la base CoreData, puis de l’ajouter au projet.
Il ne reste plus qu’à modifier une ligne dans la méthode persistentStoreCoordinator du fichier appDelegate de votre projet.

 NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MaBase.sqlite"]];

Devient :

NSString *storePath = [[self applicationDocumentsDirectory]
						  stringByAppendingPathComponent: @"MaBase.sqlite"];
	NSURL *storeURL = [NSURL fileURLWithPath:storePath];
 
	// Put down default db if it doesn't already exist
	NSFileManager *fileManager = [NSFileManager defaultManager];
	if (![fileManager fileExistsAtPath:storePath]) {
		NSString *defaultStorePath = [[NSBundle mainBundle]
								pathForResource:@"MaBase" ofType:@"sqlite"];
		if (defaultStorePath) {
			[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
		}
	}

Catégorie(s): Développement, iPad, Iphone, Objective-C, Tutorial | Comments (1)

Un commentaire

  1. BORDE (1 comments) janvier 20, 2013 @ 7 h 20 min

    Bonjour;

    Cela m’a bien aidé, cependant j’ai créer la base COREDATA et fait une sauvegarde (même base vide ) en mode SQLITE et ensuite j’ai crée la base SQLITE avec la même structure.

    Ensuite dans le projet —> « fichier ouvrir » je choisi cette base, j’ai testé que sous MACOS , petit problème avec les index ( NSNUMBERS ?)

Leave a comment