尝试通过快速桥接标头调用扩展方法时,无法识别的选择器发送到实例

时间:2015-04-03 18:19:25

标签: ios objective-c swift unrecognized-selector objective-c-swift-bridge

我正在尝试从Swift调用Objective-C代码。我created a Swift Bridging Header,并添加了对Objective-C文件的导入(例如#import "UIColor+Utils.h")。

项目构建,我甚至得到代码完成,但是当它试图执行那行代码时,它会崩溃并说unrecognized selector sent to class

我做错了什么?

(Xcode 6.2,iOS 8.2)

2 个答案:

答案 0 :(得分:11)

当您尝试从包含在桥接头中的文件调用扩展方法但未添加到正确的目标时,会导致此问题。

要解决此问题,请确保该文件是与当前正在运行的目标相同的目标的成员

例如,如果您尝试从WatchKit扩展中调用Objective-C代码(例如UIColor+Utils.m),那么.m文件(例如UIColor+Utils.m)必须在其< strong>目标会员部分。

有关详细信息,请参阅下文。


如果在Bridging-Header.h文件中包含.h文件,但忘记将文件添加到目标,则会出现以下行为。

如果您尝试在自己的班级上调用方法(例如ABCClass.doSomething()):

  • 您将获得代码完成。
  • 您将收到构建错误:Undefined symbols for architecture x86_64

如果您尝试调用类扩展方法(例如UIColor.doSomething()):

  • 您将获得代码完成。
  • 您不会收到任何构建错误/警告。
  • 尝试执行该行时,您将遇到崩溃:unrecognized selector sent to class

答案 1 :(得分:0)

使用xCode 8,添加文件时,请确保从“选项”中选择正确的目标。我选择了一个文件夹并将其直接添加到我的项目中,但不知何故没有设置正确的目标。

enter image description here