在调用UITapGestureRecognizer函数之前执行Deinit

时间:2014-10-10 02:35:45

标签: ios swift

我正在构建一个应用程序的自定义对话框,我想在其中使用当用户点击某些内容时调用的闭包,有点像这样:

var modal = ModalDialog(title: "modal title", buttonClick: { () -> Void in
            println("clicked")
        })

modal.show()

所以我创建了一个名为ModalDialog的类,其中我有一个UITapGestureRecognizer,如下所示:

var modalTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("buttonClickAction:"))
modalView.addGestureRecognizer(modalTap)

我的问题是,由于ARC,当实际识别出点击并且它试图调用buttonClickAction:时,该类已被取消初始化并且应用程序崩溃。

我如何保持ARC不会对模态进行初始化,直到我明确告诉它为止这样做?

1 个答案:

答案 0 :(得分:0)

在视图控制器中保留模态对话框的强大参考。

    var dialog : ModalDialog

    func show {
        // Keep strong reference dialog by property of your view controller
        self.dialog = ModalDialog(title: "modal title", buttonClick: { () -> Void in
            println("clicked")
        })
        self.dialog.show()
    }