2013-03-02 15 views
10

Ho un problema con un progetto sqlite che sto facendo, sto usando FMDB, seguo un semplice esempio, ma non funziona. E non riesco a trovare l'errore. Ho fatto il mio schema di database dal terminale, ho messo alcuni dati su di esso. Sono molto nuovo per iOS Dev, quindi non so esattamente se ho fatto i passi ok. Questo è quello che ho fatto:FMDB ios no tale tabella

1 - Ho creato lo schema del mio database e aggiunto alcuni campi. 2 - Ho copiato il database.db nella mia cartella di progetto in xcode. 3 - Aggiungo i file FMDB. 4 - aggiungo lo sqlite3.dylib 5 - ho messo questo codice:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.dbname = @"database.db"; 
    NSArray * docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * docDIr = [docPath objectAtIndex:0]; 
    self.dbpath = [docDIr stringByAppendingPathComponent:dbname]; 

    [self checkDB]; 

    [self getQ]; 

    return YES; 
} 
-(void) getQ 
{ 
    FMDatabase * db = [FMDatabase databaseWithPath:dbpath]; 
    [db open]; 

    FMResultSet * result = [db executeQuery:@"SELECT * FROM table1"]; 

    NSLog(@"last Error: %@",[db lastErrorMessage]); 
    NSLog(@"result: %@", result); 
} 
-(void) checkDB 
{ 
    BOOL success; 
    NSFileManager * fm = [NSFileManager defaultManager]; 
    success = [fm fileExistsAtPath:dbpath]; 
    NSError * error = [[NSError alloc] init]; 
    if (success) return; 
    NSLog(@"result:"); 
    NSString * dbPathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:self.dbname]; 

    [fm copyItemAtPath:dbPathFromApp toPath:dbpath error:&error];   
} 

A quanto pare il database è vuoto, così che cosa è successo? perché non riesco a trovare table1? Se apro il file con qualsiasi interfaccia sqlite, la tabella appare corretta. Grazie per l'aiuto La console mostra le righe successive: 2013-03-02 14: 03: 31.839 myApp [21433: c07] ultimo errore: nessuna tabella: tabella1 2013-03-02 14: 03: 31.841 myApp [21433: c07] risultato: (null)

risposta

24

Un paio di pensieri:

  1. avrei confermo il database è stato aggiunto al tuo pacco. Vai alle impostazioni di destinazione, seleziona "Crea fasi", espandi "Copia risorse pacchetto" e assicurati che il tuo database sia elencato lì. In caso contrario, fare clic sul pulsante "+" e aggiungerlo.

    bundle

  2. avrei resettato il vostro simulatore. Se hai mai eseguito l'app e non hai copiato correttamente il database, avrebbe creato per te un database vuoto nella tua cartella documenti. Resettando il simulatore, puoi eliminare tutti i database vuoti che potrebbero esserci.

  3. Se non funziona ancora, controllerei il database del bundle nel simulatore. Passare alla cartella del simulatore (~/Library/Application Support/iPhone Simulator), trovare l'app, aprire il bundle (facendo clic con il tasto destro del mouse sull'app stessa e dire "mostra il contenuto del pacchetto") e controllare il database lì e fare sicuro che ha il tuo table1.

+3

Grazie mille! questo è tutto, i passaggi 1 e 2 funzionano perfettamente! Ho dimenticato un passaggio, errore newbie: D – Fede

+0

Il tuo punto 2 è quello che ho dimenticato. Non ho copiato il database dal pacchetto nella directory dei documenti. – Suragch

+0

Grazie mille! ~ Il passaggio 1 era quello che dovevo fare :) –