有没有更好的方法在UIAlertController(Swift)中使用处理程序?

时间:2015-07-23 22:23:32

标签: ios swift segue

如果超过某个计算值,我正在尝试使用AlertController来允许用户返回主菜单。我知道使用简单的segue会导致内存问题。有没有办法在这种情况下使用popToRootViewController方法而不是简单地使用segue?编译器对我大喊大叫(毫无疑问是有充分理由的),但没有给我任何有用的建议。我知道问题源于Abort Fit动作的处理程序。有人能指出我正确的方向吗?

override func viewDidLoad() {
    super.viewDidLoad()

    if deltaK > 2.25 {

    var helpAlert = UIAlertController(title: "Stop!", message: "Due  to high toricity, the fit should be aborted.", preferredStyle: .Alert)

     helpAlert.addAction(UIAlertAction(title: "Abort Fit", style: UIAlertActionStyle.Default, handler: { action in self.navigationController.popToRootViewControllerAnimated(true)) })

     helpAlert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(helpAlert, animated: true, completion: nil)
    }

2 个答案:

答案 0 :(得分:2)

如果要在闭包中引用_1,则需要将[weak self]添加到每个处理程序块的开头。

答案 1 :(得分:0)

我忽略了解开问题。将[weak self]添加到闭包会触发编译器发出错误信号。此代码按预期工作。 nhgrif指出了使用带有viewDidLoad的Alert的问题。我应该寻找另一种方法吗?

override func viewDidLoad() {
    super.viewDidLoad()

    if deltaK > 2.25 {

        var helpAlert = UIAlertController(title: "Stop!", message: "Due to the high corneal toricity, a toric GP lens may provide better fit, vision, and comfort. Consider using the Empirical GP lens designer from the Main Menu, or use toric GP fitting set.", preferredStyle: .Alert)

        helpAlert.addAction(UIAlertAction(title: "Abort Fit", style: UIAlertActionStyle.Default, handler: { [weak self] action in self!.navigationController?.popToRootViewControllerAnimated(true) }))

        helpAlert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(helpAlert, animated: true, completion: nil)
    }