Я пытаюсь заставить пользователя перейти к другому контроллеру представления при нажатии на ячейку. В настоящее время я настроил переход к ячейке, перетаскивая элемент управления в раскадровке на контроллер представления, а затем передав следующий код для prepare(for segue...)
. По сути, есть мои охранные заявления, подтверждающие, что у меня правильный контроллер представления, и затем я передаю объект между ними.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch(segue.identifier ?? "") {
case "ShowEventDetailsSegue":
guard let navVC = segue.destination as? UINavigationController else {
fatalError("Unexpected destination: \(segue.destination)")
}
guard let EventDetailViewController = navVC.viewControllers.first as? EventViewController else {
fatalError("Unexpected navigation view controller: \(String(describing: navVC.viewControllers.first))")
}
guard let selectedEventCell = sender as? EventTableViewCell else {
fatalError("Unexpected sender: \(String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedEventCell) else {
fatalError("The selected cell is not being displayed by the table")
}
let selectedEvent = events[indexPath.section]
EventDetailViewController.event = selectedEvent
default:
fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
}
}
Я знаю, что другие люди рекомендуют называть что-то вроде
DispatchQueue.main.async {
self.present(myVC, animated: true, completion: nil)
}
(см. здесь и также здесь )
но когда я это делаю, я получаю ошибку «Завершение приложения из-за необработанного исключения« NSInvalidArgumentException », причина:« Приложение пыталось представить модально активный контроллер ».
По сути, я хочу, чтобы пользователь мог только один раз щелкнуть ячейку и при этом иметь возможность передавать данные другому контроллеру представления.
Что также странно, это то, что это только начало происходить. У меня не было этой проблемы до сегодняшнего дня.