Есть несколько вещей, которые неверны в подходе, которому вы придерживаетесь, но потому что это выходит за рамки первоначального вопроса, я бы их пока проигнорировал.
Проблема с кодом:
Ваш делегат tableView и источник данных установлены в представлении контроллера целевого представления, загруженного
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
}
Но вы пытаетесь вызвать selectRow
даже до того, как делегат и источник данных установлены (я имею в виду, когда вы звоните selectRow
, ваш viewDidLoad
даже не вызывается)
let indexPath = IndexPath(row: 0, section: 0)
destinationViewController.tableView.selectRow(at: indexPath, animated: true, scrollPosition: .none)
потому что вы четко заявили
Поэтому я записываю этот код перед setViewControllers выше
Решение:
убедитесь, что вы установили делегат и источник данных для tableView даже перед вызовом selectRow(at:
Два возможных решения
1. Убедитесь, что viewDidLoad вызывается даже до того, как вы позвоните selectRow
Чтобы вызвать viewDidLoad
, вы можете попробовать
let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "destinationViewController") as! destinationViewController
let _ = destinationViewController.view
или, если вы предпочитаете более безобразный заход на посадку, viewDidLoad
вручную: P
destinationViewController.viewDidLoad()
2. Задайте источник данных делегата и источник данных вручную перед вызовом selectRow
let destinationViewController = self.storyboard?.instantiateViewController(withIdentifier: "destinationViewController") as! destinationViewController
destinationViewController.tableView.delegate = destinationViewController
destinationViewController.tableView.dataSource = destinationViewController
Совет:
Используйте корпус Паскаля для имен классов DestinationViewController