2012-02-29 54 views
8

我在嘗試使用FMDatabase時遇到了問題。嘗試使用SQLite包裝器時出錯FMDatabase

我已經加入theese文件:

FMDatabaseQueue 
FMDatabaseAdditions 
FMDatabase 
FMResultSet 
FMDatabasePool 

..和我還添加了libsqlite3.dylib庫和進口FMDatabase.h,但只要我去掉這一行:

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

..我得到這個錯誤:

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

我也試圖改變像4.0之間部署目標設置 - 5.0和創建一個新的,乾淨的項目等。

我正在使用Xcode版本4.3(4E109)。

我在做什麼錯? :)

// Stefan

+1

您是否將.h和.m文件添加到您的項目中? – lawicko 2012-02-29 16:55:52

+1

是的,我已經添加了src除fmdb.m以外的所有文件。 – 2012-03-01 07:31:31

回答

16

這是一個鏈接錯誤,意義,一切你是否厭倦了編譯器是好的,但一旦到了要一起包中的所有編譯對象代碼轉換成可執行的,它無法找到該被引用的類的實現在代碼中。

將.m文件拖到Xcode中的項目源列表中應該自動將它們添加到「構建階段」,但是如果你這樣做了,並且出現此錯誤,請檢查它們是否在該處:單擊頂部在左側源列表中獲取項目設置,單擊下一個窗格中的目標,單擊下一個窗格中的「Build Phases」列標題,然後展開「編譯源」行。如果FM文件不在那裏,請點擊列表底部的+按鈕並選擇它們。

+0

你說得對,這解決了我的問題。謝謝! – 2012-03-01 07:39:38

+3

這是Xcode 4.3 btw中的一個錯誤,它會在添加文件時取消選中「添加到目標」複選框。 – valexa 2012-03-01 10:50:25

+0

繼續搖滾,Xcode ..感謝您的注意 - 我一定要留意文件退出構建階段。 – davehayden 2012-03-01 22:15:28

1

您是否在您使用它們的地方導入了FMDB標題?

#import "FMDatabase.h" 
+0

是的。我可以像這樣定義我的數據庫變量:FMDatabase * db;它的工作原理。它取消註釋後立即崩潰[FMDatabase databaseWithPath:@「/ tmp/tmp.db」] ;. – 2012-03-01 07:33:10

2

擴展在davehayden的答案...

如果添加的頭文件和源文件到Xcode的一個文件夾中,.m文件不被添加到編譯源代碼列表。我通常會被抓到,因爲我想在我的項目文件夾中保留一個合理的文件夾結構。爲了解決這個問題,我手動將文件複製到我想要的項目文件夾中。然後在Xcode中,將每個單獨的頭文件和源文件添加到我的項目中而不進行復制(使用文件>添加文件到...)。在Project Navigator中選擇所有鬆散的文件,右鍵單擊,然後選擇一個文件夾。

有點晚了,但我希望這可以幫助別人。