10

我查看了所有其他具有相同错误的帖子(使用未声明的类型),但仍然无法弄清楚我的项目有什么问题。

与其他情况的不同之处在于,我可以在 AppDelegate 和 ViewController 类中成功使用 FMDatabase,但不能从我创建的另一个类中使用,尽管与 AppDelegate 和 ViewController 类在同一个项目中。

通过“成功使用”,我的意思是我可以访问其中的数据库和表。

另请注意,我无需导入任何内容即可在 AppDelegate 或 ViewController 中使用 FMDatabase。

到目前为止我所做的(Xcode。6.4 Swift 1.2):

  1. 创建了一个单一的视图 swift 项目。

  2. 使用 cocoapods 安装 FMDB ( https://cocoapods.org/?q=fmdb )

  3. 为 FMDB 创建了一个桥接头

我可以从 AppDelegate.swift 和 ViewController.swift 类中成功声明和使用 FMDatabase。

AppDelegate.swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    var database: FMDatabase? // OK
    ...

ViewController.swift

class ViewController: UIViewController {

    var database: FMDatabase? // OK
    ...

在 DBUtil.swift 中,虽然我收到“使用未声明的类型 'FMDatabase'”错误。

DBUtil.swift

class DBUtil {

    var database: FMDatabase? // Error: "Use of undeclared type 'FMDatabase'

}

Swift Bridging Header提供了一个复制器。

对于任何提示或想法,提前谢谢你。

4

4 回答 4

17

这是因为它DBUtilBridgingHeaderTests目标的一部分(但应用程序委托和视图控制器不是),但没有为 FMDB 配置该目标(测试目标的“Objective-C Bridging Header”设置为空)。

您可以:

  1. DBUtil从测试目标中删除:

    在此处输入图像描述

  2. 或者为测试目标指定桥接头:

    在此处输入图像描述

于 2015-08-05T16:51:04.003 回答
1

我在这里留下了其他情况的回复:我遇到了同样的错误,但问题出在我忘记写的桥接头中#import "FMDatabase.h"

于 2016-03-14T13:21:56.587 回答
1

如果您使用 CocoaPods 安装了 FMDB,只需添加

import FMDB

在您使用 FMDatabase 的 swift 文件中。

于 2017-12-07T12:19:52.690 回答
0

我的情况是同样的错误。我通过勾选“在需要时复制项目”&& 创建组并制作它,仅将 .h 和 .m 文件(不是文件夹)添加到项目中来修复它。然后创建 obj c 桥接头。

在 Target 的构建阶段 - 使用库链接二进制文件 - 添加了 libsqlite3.tbd。将嵌入内容包含 swift 代码转为 Yes。

它解决了这个参考问题。

于 2016-04-28T11:35:26.887 回答