Je travaille sur un nouveau projet iPhone et je rencontre des problèmes avec sqlite. Je l'ai déjà fait sur un projet différent et ça a très bien fonctionné, donc je ne suis pas sûr de ce qui se passe exactement avec celui-ci. J'utilise le même code que précédemment, mais la situation est un peu différente. Tout d'abord, j'essaye cette fois d'utiliser le test unitaire, j'ai donc créé un ensemble de test d'unité de cacao, et j'ai réussi à faire fonctionner ce test, puis j'ai voulu faire un test d'unité pour ma base de données sqlite.Erreurs SQLite à l'aide du simulateur iPhone/Problème d'autorisation possible
La première chose que courir avec ce test est [auto checkAndCreateDatabase] qui est la suivante:
-(void) checkAndCreateDatabase{
BOOL success;
// Create a FileManager object, we will use this to check the status
// of the database and to copy it over if required
NSFileManager *fileManager = [NSFileManager defaultManager];
// Check if the database has already been created in the users filesystem
success = [fileManager fileExistsAtPath:databasePath];
// If the database already exists then return without doing anything
if(success) return;
// If not then proceed to copy the database from the application to the users filesystem
// Get the path to the database in the application package
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
// Copy the database from the package to the users filesystem
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
[fileManager release];
}
Alors je tente d'ouvrir la base de données avec la ligne suivante:
int result = sqlite3_open([databasePath UTF8String], &database);
Cela échoue à chaque fois avec le code d'erreur 14 SQLITE_CANTOPEN, et databasePath est "/ Users/labuser/Bibliothèque/Application Support/iPhone Simulator/Documents/projectfusion.db3". Ce qui est étrange, c'est que quand je vais dans ce répertoire, Documents/n'est pas là, donc si je le crée, alors ça n'échoue pas MAIS projectfusion.db3 a alors une taille de 0kb; les tables ne sont pas là. Cela fait échouer sqlite3_prepare_v2(), car les tables ne sont pas là. Si je copie manuellement le fichier projectfusion.db3 dans ce répertoire avant de l'exécuter, cela fonctionne très bien. Est-ce parce que je le fais dans les tests unitaires et que les scripts n'ont pas la permission ou quelque chose comme ça? Ou est-ce parce que je travaille sur un ordinateur scolaire de mon université et que je ne peux pas écrire dans ce répertoire? (J'ai essayé de me connecter en tant qu'administrateur et cela n'a pas fonctionné non plus).
Je ne vois pas pourquoi c'est différent de ce que je fais déjà. Je l'ai essayé en remplaçant mon code ci-dessus par NSString * databasePathFromApp = [NSString stringWithFormat: @ "% @ /% @", [self applicationDocumentsDirectory], databaseName]; et le chemin qui a été retourné était "/ Users/labuser/Bibliothèque/Application Support/iPhone Simulator/Documents/projectfusion.db3" qui est le même que ci-dessus. Je suppose que "ajouter la base de données à votre ensemble d'applications" signifie l'ajouter en tant que fichier existant? Je l'ai fait dans mon répertoire "Ressources". – gameburke
Il devrait retourner comme ceci:/Users/max/Bibliothèque/Application Support/iPhone Simulator/4.2/Applications/C5178257-E12C-4088-BA2C-68E472458575/Documents Il est vraiment étrange. Ok, pouvez-vous accéder à votre base de données à partir de l'ensemble d'applications? – Max
J'ai regardé dans le Finder sous build/Debug-iphonesimulator/ProjectFusion, "Afficher le contenu du paquet" sur ProjectFusion et il était là. C'est ce que tu veux dire? – gameburke