2014-10-10 3 views
1

Я строй пользовательского диалога для приложения, в котором я хотел бы использовать затворы, которые вызываются, когда пользователь нажимает на что-то, вроде как это:Deinit перед тем функция UITapGestureRecognizer называется

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) 

Моя проблема заключается в том, что из-за АРК, когда кран фактически признается и пытается вызвать buttonClickAction: класс уже deinitialised и приложение сбои.

Как бы я хотел сохранить ARC от деинициализации модального до тех пор, пока я явно не скажу, что это так?

ответ

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() 
    } 
+0

Это то, о чем я не знаю, как бы я это сделал, посмотрел в книге Apple, и это не имеет смысла для меня. ModalDialog вводится внутри класса контроллера представления, но как мне крепко ссылаться на него? –

+0

Отредактирован ответ –

Смежные вопросы