2009-05-11 6 views
0
- init 
{ 
    if(![super init]) return nil; 

    //the database is stored in the application bundle. 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *path = [documentsDirectory stringByAppendingFormat:@"/base.sqlite"]; 
    NSLog(@"%@",path); 
    db = [FMDatabase databaseWithPath:path]; 
    [db setLogsErrors:YES]; 

    if (![db open]) { 
     NSLog(@"Could not open db."); 
     return 0; 
    } else { 
     NSLog(@"DB Open...."); 
    } 

    FMResultSet *rs = [db executeQuery:@"SELECT * FROM settings"]; 

    return self; 
} 

c'est le code que j'utilise pour essayer d'accéder aux données des paramètres. mais cela donne une erreur (et je peux vous assurer qu'il ya une table de paramètres!)iphone FMDB ne peut pas trouver la table

ici est une décharge du terminal

BEGIN TRANSACTION; 
CREATE TABLE About (id integer PRIMARY KEY AUTOINCREMENT,key varchar UNIQUE,value text); 
DELETE FROM sqlite_sequence; 
CREATE TABLE settings (version integer,updated timestamp,owner varchar); 
INSERT INTO "settings" VALUES(1,'2009-05-11 14:29:07','boulevart'); 
COMMIT; 

et l'erreur:

2009-05-11 16:14:19.799 SummerGuide[9892:20b] /Users/andyjacobs/Library/Application Support/iPhone Simulator/User/Applications/762630F5-78CB-41A4-85C2-964316ACFE1D/Documents/base.sqlite 
2009-05-11 16:14:19.801 SummerGuide[9892:20b] DB Open.... 
2009-05-11 16:14:19.804 SummerGuide[9892:20b] DB Error: 1 "no such table: settings" 
2009-05-11 16:14:19.804 SummerGuide[9892:20b] DB Query: SELECT * FROM settings 

la chose étrange est si je change mon chemin à par exemple /baseeeeee.sqlite (qui n'est pas aucun fichier) il dit toujours "DB Open ...."

Je viens d'ajouter un fichier sqlite existant (ba se.sqlite) dans mon dossier de recours et ajouté la librairie sqlite3 à mes frameworks.

Répondre

3

Pour obtenir le chemin de votre fichier dans le paquet d'application, utilisez ceci:

[[NSBundle mainBundle] pathForResource:@"base" ofType:@"sqlite"]; 

Pour ouvrir réellement la base de données, vous devrez peut-être copier dans le répertoire des documents d'abord, parce que essayer de modifier un fichier dans votre ensemble d'applications est une mauvaise nouvelle.

+0

Avez-vous besoin de le copier dans le répertoire de documents si vous souhaitez insérer ou mettre à jour des enregistrements? –

+0

Oui. La raison en est que la signature de code de votre application est liée à un hachage sécurisé de tout ce qui se trouve dans l'ensemble d'applications. Si vous modifiez quelque chose dans l'ensemble, cette signature de code sera invalide. ce serait (j'imagine, ne l'ayant pas explicitement essayé) faire échouer votre application, puisque la signature de code serait maintenant invalide. –

Questions connexes