objective-c - 从 Swift 类调用 Objective-C 导致链接器错误

标签 objective-c xcode macos swift xcode6

我正在尝试在 Swift 中使用 RFDuino Objective-C 库。听起来很简单,我以前从 Swift 类中调用过 Objective-C,没问题。然而这一次我碰壁了。

创建的头文件。向其添加了头文件。 Swift 可以毫无问题地查看这些类。项目编译正常。

构建过程中的问题出现在我尝试调用任何 Objective 类之后

例如:

    override func viewDidLoad() {
         super.viewDidLoad()

        let rfDuinoManager: RFduinoManager = RFduinoManager.sharedRFduinoManager()

}

Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_RFduinoManager", referenced from: __TMaCSo14RFduinoManager in ViewController.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

enter image description here

我不确定我在这里遗漏了什么。 链接到这里的项目。 https://www.dropbox.com/s/rza1ce01g4q5lp6/SmartHomeHub-stackoverflow.zip?dl=0

在此先感谢您的帮助。老实说现在失去希望并考虑将整个库重写为 Swift

最佳答案

问题是rfduino文件夹是如何添加到项目中的。所以

  1. 删除 rfduino 文件夹(在左侧的项目导航器面板中选择 rfduino 文件夹并点击删除按钮,但当它要求将其移至垃圾桶或仅删除引用时,选择“删除引用”。

    enter image description here

  2. 你的桥接 header 有一个绝对路径引用,我建议通过在build设置中选择它并点击删除按钮来完全删除它:

    enter image description here

  3. 重新将 rfduino 文件添加回项目,这一次,在“添加的文件夹”选项下,选择“创建组”而不是“创建文件夹引用”。如果您希望它提示为您创建适当的桥接 header ,请不要选择文件夹,而是选择单个文件:

    enter image description here

    同时确保选中下面的 SmartHomeHub

  4. 如果你这样做正确,它会要求你自动创建桥接头:

    enter image description here

  5. 转到这个新的桥接头并再次添加您的导入行:

    enter image description here

关于objective-c - 从 Swift 类调用 Objective-C 导致链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628890/

相关文章:

ios - 更新到最新版本的 CocoaPods?

javascript - 不支持 "Content-Type"的 HTTP "audio/mpeg"Issue On Firefox

ios - 如何从服务器获取多张图片并保存并在 iPhone 应用程序中显示?

ios - 快速获取PHAsset信息?

xcode - 使用prepareForSegue作为数字而不是字符串传递textFielddata

ios - App Store Connect消息:您的帐户很快将需要迁移到联合身份验证

macos - 无法使用 gifify 将 mp4 转换为 gif

iphone - 动画表格 View 部分标题

iphone - Objective-C @Selector(methodWithArguments)

objective-c - 如何为 Game Center 挑战在 uint64_t 上存储结构信息