Swift弱委托运行时错误(访问不良)。错误?

时间:2014-08-18 20:18:33

标签: macos delegates swift

我在Swift(OSX)中遇到代理问题。我有一个视图,通过弱引用连接到委托。简化的代码可能是这样的:

protocol MyProtocol: class {
    func protocolFunc() -> Int
}

class MyController : MyProtocol {
    func protocolFunc() -> Int { return 2 }
}

class MyView : NSView {
    weak var delegate: MyProtocol?

    func grabData {
        var data = delegate?.protocolFunc()
    }
}

当调用delegate?.protocolFunc()时,应用程序崩溃说"访问不良"。就好像MyController实例已经消失了......但事实并非如此。 MyController实例位于NSDocument子类中;和视图的委托已正确设置。

如果我将委托声明为strong,则崩溃就会消失。但问题是我希望代表成为weak。发生了什么事?对我而言,弱引用应该有效。

2 个答案:

答案 0 :(得分:1)

在撰写本文时(Xcode 6 Beta 5),弱代表有一个错误。目前,在修复之前所能做的就是将protocol MyProtocol: class更改为@objc protocol MyProtocol,并避免在协议中使用任何纯Swift类。

答案 1 :(得分:0)

临时替代解决方案是改变这个:

weak var delegate: MyProtocol?

到此:

weak var delegate: MyController?

当然它违背了MyProtocol的目的,但是,它允许你在我们等待正确的修复时使用纯Swift类。