在swift中关闭属性访问不良(EXC_BAD_ACCESS)

时间:2014-08-13 11:47:13

标签: ios xcode swift initialization closures

我有Testbutton_action可选闭包:

class Test : CustomViewFromXib {
    var button_action : (() -> ())?
    @IBAction func button_pressed(sender: AnyObject) {
        if let action = button_action {
            action()
        }
    }
}

这就是我使用这个类的方法:

 let test_view = Test(frame: CGRect.nullRect)
 self.view.addSubview(test_view)
 test_view.button_action = {
    () -> () in
    print("test")
 }

我遇到EXC_BAD_ACCESS错误:

test_view.button_action = {
    () -> () in
    print("test")
}

我不知道为什么,因为我只是想设置初始值。有可能这样做吗?

更新:

我明白,不能从我的对象中调用任何属性或方法。不仅是闭包,还有弦乐(例如)。

更新2:

这是我重现问题的代码示例。我想初始化程序有问题... https://www.dropbox.com/s/1d8fvxm0es9b5n4/TestInit.zip

(XCode 6 Beta 5)

1 个答案:

答案 0 :(得分:0)

编写代码

let test_view = Test(frame: CGRect.nullRect)
 self.view.addSubview(test_view)
 test_view.button_action = {
    () -> () in
    print("test")
 }

而不是

let test_view = Test(frame: CGRect.nullRect)
 self.view.addSubview(test_view)
 test_view.button_action = { [unowned self]
    () -> () in
    print("test")
 }

这是详细的理论答案 Shall we always use [unowned self] inside closure in Swift https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html