我正在编写一个必须使用Objective-C库并采用Objective-C协议作为委托的Swift应用程序。我实例化委托类并将其设置为Objective-C委托者的委托。当我运行应用程序并且委托者尝试引用委托时,我收到“EXC_BAD_ACCESS(code = 1,address = 0xc)”。
通过Xcode调试,我启用了Zombies,设置了一个断点,并观察了Swift委托的内存地址。我发现应用程序正在更改Swift委托的内存地址位置,而Objective-C委托者引用旧的内存位置导致应用程序因EXC_BAD_ACCESS错误而崩溃。
Objective-C库是在没有ARC的情况下预编译的,不使用bitcode。我无法弄清楚如何让我的应用程序停止更改委托的内存位置,或告诉委托者更改内存位置。请参阅下面的代码。
Objective-C Delegator .h文件
@protocol Library_Delegate;
@interface Library : NSObject{
id<Library_Delegate> delegate;
}
@property(nonatomic, assign) id<Library_Delegate> delegate;
Objective-C Protocol .h文件
@class Library;
@protocol Library_Delegate <NSObject>
-(void) Library_CallbackFunction;
@end
Swift Delegate
class LibraryAPIWrapper: NSObject, Library_Delegate {
let library = Library()
override init() {
super.init()
Library.delegate = self
}
func Library_CallbackFunction() {
print("Success")
}
}
Swift ViewController
override func viewDidLoad() {
let libraryAPIWrapper = LibraryAPIWrapper()
}