尝试使用SQLite包装器FMDatabase时出错

时间:2012-02-29 15:14:52

标签: iphone ios sqlite fmdb

我尝试使用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

3 个答案:

答案 0 :(得分:17)

这是一个链接器错误 - 这意味着,您为编译器提供的所有内容都很好但是一旦将所有编译后的目标代码打包到一个可执行文件中,它就无法找到代码中引用的类的实现。

将.m文件拖到Xcode中的项目源列表中会自动将它们添加到“构建阶段”,但是如果你这样做并且你收到了这个错误,请检查它们是否在那里:点击顶部 - 左侧源列表中的级别项以获取项目设置,单击下一个窗格中的目标,单击 next 窗格中的“Build Phases”列标题,然后展开“编译源”行。如果FM文件不在那里,请单击列表底部的+按钮并选择它们。

答案 1 :(得分:2)

扩大davehayden的答案......

如果将标题和源文件的文件夹添加到Xcode中,则.m文件不会添加到“编译源”列表中。我经常被抓到这里因为我想在我的项目文件夹中保留一个合理的文件夹结构。为了解决这个问题,我手动将文件复制到我想要的项目文件夹中。然后在Xcode中,将每个单独的标题和源文件添加到我的项目而不复制(使用File> Add Files To ...)。在Project Navigator中选择所有松散文件,右键单击,然后从选择中创建一个文件夹。

有点晚了,但我希望这有助于其他人。

答案 2 :(得分:1)

您是否在使用它们的地方导入了FMDB标题?

#import "FMDatabase.h"