как да избегнете силна препратка при обратно извикване на 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
}

Следва срив: http://i.stack.imgur.com/JfgNi.png

И така, как мога да избегна силна препратка тук?


person Saurav Nagpal    schedule 21.08.2014    source източник
comment
Какво конкретно беше катастрофата?   -  person Adam Wright    schedule 21.08.2014
comment
Нещата се променят бързо. Как се държи с beta6?   -  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