Swift委托和Objective-C委托人:EXC_BAD_ACCESS

时间:2015-12-07 18:58:27

标签: ios objective-c swift ipad delegates

我正在编写一个必须使用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()
}

0 个答案:

没有答案