繁体   English   中英

Swift-init()中的UIButton.addTarget崩溃

[英]Swift - Crash when UIButton.addTarget in init()

class Test: NSObject {

init(mainView:UIView){
   super.init()
   var button = UIButton.buttonWithType(UIButtonType.System) as! UIButton
   button.setTitle("Test", forState: UIControlState.Normal)
   button.backgroundColor = UIColor.whiteColor()
   button.frame = CGRectMake(0, 0, 250, 40)
   button.addTarget(self, action: "doSomething", forControlEvents: UIControlEvents.TouchUpInside)
   mainView.addSubview(button)
}
func doSomething(){
   println("test")
}
}

在其他课程中,我尝试通过单击此按钮来执行doSomething(),但未成功,我的应用崩溃了...

var testvar = Test(view)

如何通过按下按钮来触发此功能,而不会导致应用崩溃?

这是内存管理问题。 您的问题是,离开方法后,存储在局部变量testvar中的Test实例将被释放。 UIButton方法的addTarget不会保留其目标,因此不再有对Test实例的强大引用,它将被释放。 如果点击按钮,系统将尝试在现在释放的实例上调用doSomething 这导致崩溃。

您可以将实例存储在UIViewController的实例变量中(或任何称为var testvar =对象)。

例如:

class FirstViewController: UIViewController {
    var testvar: Test!

    override func viewDidLoad() {
        super.viewDidLoad()
        testvar = Test(mainView:self.view)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM