Как активировать ранее отключенное ограничение?

Я храню ссылки на мои NSLayoutConstraint

var flag = true
@IBOutlet weak var myConstraint: NSLayoutConstraint!

Тогда для некоторых @IBAction Я активирую / деактивирую в зависимости от моего flag переменная:

@IBAction func tapped(sender: UIButton) {
    flag = !flag
    UIView.animateWithDuration(1.0) {
        if self.flag {
            NSLayoutConstraint.activateConstraints([self. myConstraint])
        } else {
            NSLayoutConstraint.deactivateConstraints([self. myConstraint])
        }
    }
}

Но когда я снова называю свое действие, у меня появляется ошибка unexpectedly found nil while unwrapping an Optional value за myConstrain,

Более того, это не оживляет. Что я делаю неправильно?

Я следую учебному пособию WWDC 2015:

1 ответ

Решение

Деактивация ограничения аналогична вызову removeConstraint: для просмотра. Обратитесь к документации. Поэтому, когда вы удаляете объект, который имеет weak ссылка вызовет освобождение объекта для него. Теперь этот объект nil и активация этого не будет иметь никакого эффекта вообще. Чтобы решить эту проблему, вы должны иметь сильную ссылку на объект ограничения.

@IBOutlet strong var myConstraint: NSLayoutConstraint!
Другие вопросы по тегам