2012-02-29 15 views
8

Si verificano problemi quando si tenta di utilizzare FMDatabase.Errore durante il tentativo di utilizzare il wrapper SQLite FMDatabase

ho aggiunto i file theese:

FMDatabaseQueue 
FMDatabaseAdditions 
FMDatabase 
FMResultSet 
FMDatabasePool 

..e Ho anche aggiunto la biblioteca libsqlite3.dylib e importati FMDatabase.h, ma appena ho Decommentare questa linea:

FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; 

..Io ottengo questo errore:

Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_FMDatabase", referenced from: 
     objc-class-ref in DBWrapper.o 
ld: symbol(s) not found for architecture i386 

ho anche provato a cambiare le impostazioni come destinazione di distribuzione tra 4,0 - 5.0 e creazione di un nuovo progetto pulito, ecc.

Utilizzo Xcode versione 4.3 (4E109).

Cosa sto sbagliando? :)

// Stefan

+1

Hai aggiunto i file .h e .m al tuo progetto? – lawicko

+1

Sì, ho aggiunto tutti i file da src tranne fmdb.m. –

risposta

16

Questo è un linker errore significato, tutto quello che alimentato il compilatore andava bene, ma una volta che è arrivato il momento di confezionare tutto il codice oggetto compilato insieme in un file eseguibile che non riusciva a trovare l'implementazione per una classe che viene fatto riferimento nel codice.

trascinando i file .m nella lista di origine del progetto in Xcode dovrebbe aggiungerli automaticamente alla "costruzione di fase", ma se avete fatto questo e che stai ricevendo questo errore, controllare che siano lì: Fare clic sul top -elemento di livello nella lista dei sorgenti di sinistra per ottenere le impostazioni del progetto, fare clic sulla destinazione nel riquadro successivo, fare clic sull'intestazione della colonna "Crea fasi" nel riquadro successivo a, quindi espandere la riga "Compile sources". Se i file FM non sono presenti, fai clic sul pulsante + in fondo all'elenco e selezionali.

+0

Avevi ragione, questo ha risolto il mio problema. Grazie! –

+3

Questo è un bug in Xcode 4.3 btw che rende deselezionata la casella di controllo "Aggiungi agli obiettivi" quando si aggiungono file. – valexa

+0

Keep on rockin ', Xcode .. Grazie per la nota - Sarò sicuro di tenere d'occhio i file che escono dalla fase di costruzione. – davehayden

1

Avete importato le intestazioni FMDB nel luogo che si sta utilizzando loro?

#import "FMDatabase.h" 
+0

Sì. Posso definire la mia variabile di database in questo modo: FMDatabase * db; e funziona Si blocca non appena decommento [FMDatabase databaseWithPath: @ "/ tmp/tmp.db"] ;. –

2

Ampliando la risposta di davehayden ...

Se si aggiunge una cartella di intestazione e di origine file in Xcode, i file .m non vengono aggiunti alla lista di compilare i sorgenti. Di solito mi sorprendo qui perché voglio conservare una struttura di cartelle ragionevole nella cartella del mio progetto. Per aggirare questo, copio manualmente i file nella cartella del mio progetto dove li voglio. Quindi, in Xcode, aggiungi ogni singola intestazione e il file sorgente al mio progetto senza copiare (utilizzando File> Aggiungi file a ...). Seleziona tutti i file liberi nel Navigatore progetto, fai clic con il tasto destro e crea una cartella dalla selezione.

Un po 'in ritardo, ma spero che questo aiuti qualcun altro.

Problemi correlati