我正在尝试从 Swift 调用 Objective-C 代码。我创建了一个 Swift Bridging Header,并将导入添加到 Objective-C 文件(例如#import "UIColor+Utils.h"
)。
项目构建,我什至得到了代码完成,但是当它尝试执行那行代码时,它崩溃并说unrecognized selector sent to class
.
我做错了什么?
(Xcode 6.2,iOS 8.2)
我正在尝试从 Swift 调用 Objective-C 代码。我创建了一个 Swift Bridging Header,并将导入添加到 Objective-C 文件(例如#import "UIColor+Utils.h"
)。
项目构建,我什至得到了代码完成,但是当它尝试执行那行代码时,它崩溃并说unrecognized selector sent to class
.
我做错了什么?
(Xcode 6.2,iOS 8.2)
这是当您尝试从包含在桥接头中但未添加到正确目标的文件中调用扩展方法时引起的。
要解决此问题,请确保该文件与当前正在运行的文件属于同一目标。
例如,如果您尝试UIColor+Utils.m
从 WatchKit 扩展调用 Objective-C 代码(例如 ),那么 .m 文件(例如UIColor+Utils.m
)必须在其目标成员部分中包含 WatchKit 扩展。
有关更多信息,请参见下文。
如果您在文件中包含 .h 文件Bridging-Header.h
,但忘记将文件添加到目标,您将得到以下行为。
如果您尝试在自己的类上调用方法(例如ABCClass.doSomething()
):
Undefined symbols for architecture x86_64
.如果您尝试调用类扩展方法(例如UIColor.doSomething()
):
unrecognized selector sent to class
。