как избежать сильной ссылки в обратном вызове UIAlertViewController

Я создаю контроллер представления предупреждений с действием, используя следующий код

var alertView = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alertView.addAction(UIAlertAction(title: NVConstant.alertInfoBtnTitle, style: UIAlertActionStyle.Default, handler: alertHandler))

И мой код обработчика предупреждений следующий:

@lazy var alertHandler:(UIAlertAction!)->Void = { a![enter image description here][1]ction in
    var clickedButtonTitle:String = action.title
    switch clickedButtonTitle{
    case NVConstant.notificationAlertConfirmatinTitle :
        Utility.cancelAlarmForTheActivity(activity: self.selectedActivity.0)
    case NVConstant.notificationAlertCancelTitle :
        self.selectedSwitch.setOn(true, animated: true)
    default :
        return
    }

}

Итак, мой вопрос заключается в том, как избежать сильной ссылки на себя при закрытии обратного вызова. Я пытался использовать [unowned self], но после этого сбоя приложения, я думаю, из-за несоответствия параметров.

@lazy var alertHandler:(UIAlertAction!)->Void = { [unowned self] action in  //Crash 
// code
}

Ниже приведен Crash: http://i.stack.imgur.com/JfgNi.png

Итак, как я могу избежать сильной ссылки здесь?


person Saurav Nagpal    schedule 21.08.2014    source источник
comment
В чем конкретно была авария?   -  person Adam Wright    schedule 21.08.2014
comment
Вещи меняются быстро. Как ведет себя с бета6?   -  person Mike Pollard    schedule 21.08.2014
comment
Привет, Адам, спасибо за ответ, я добавил URL-адрес изображения аварии.   -  person Saurav Nagpal    schedule 22.08.2014
comment
С бетой 6 работает нормально.   -  person Saurav Nagpal    schedule 22.08.2014


Ответы (1)


Попробуйте переписать закрытие следующим образом.

@lazy var alertHandler:(UIAlertAction!)->Void = { [unowned self] (UIAlertAction: action) -> () in

}
person Ernesto Cambustón    schedule 22.08.2014
comment
Привет, Эрнесто, спасибо за ответ, но попробовал и это, и приложение вылетело таким же образом. - person Saurav Nagpal; 22.08.2014
comment
Это правильный синтаксис, однако вы должны знать, что этого можно избежать, если владельцем контроллера является функция (а не контроллер). См. stackoverflow.com/a/34931631/654870. - person Kyle Clegg; 27.06.2016