Значение проставляют в лейбл следующего экрана до его показа — падение
Из списка товаров открывают карточку:
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:)
