Вступить в клуб →
средняявопросUIKit и SwiftUI: экраны и состояние

Значение проставляют в лейбл следующего экрана до его показа — падение

Из списка товаров открывают карточку:

final class DetailViewController: UIViewController {
    @IBOutlet var titleLabel: UILabel!
}

let detail = storyboard!.instantiateViewController(
        withIdentifier: "Detail") as! DetailViewController
detail.titleLabel.text = item.title
navigationController?.pushViewController(detail, animated: true)

Приложение падает на строке с titleLabel ещё до того, как экран появится. Почему так происходит?

  • Аутлет объявлен как var вместо weak, поэтому лейбл успевает освободиться до показа экрана
  • Падение вызвано принудительным приведением as!: его нужно заменить на as? и проверять результат перед обращением к лейблу
  • Вью контроллера ещё не загружено, аутлеты равны nil: значение кладут в обычное свойство и показывают в viewDidLoad
  • instantiateViewController отдаёт контроллер без иерархии вью, поэтому переход нужно делать только через segue и prepare(for:)

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела