Передать массив из одного ViewController'a в другой
Пишу приложение по типу iTunes (2 вкладки: Поиск и История).
На вкладке Поиск выдается TableView со списком альбомов. При нажатии на альбом открывается ShowInfoViewController (ViewController с доп. информацией по альбому).
Я хочу, чтобы в этот момент, при нажатии на альбом, кроме появления ShowInfoViewController, еще и отправлялись данные в HistoryViewController.
Как я могу просто записать в другой контроллер данные, не открывая его на View, как это происходит при вызове метода present? (Нужно каждый раз при нажатии на альбом класть данные из выбранной ячейки в HistoryViewController)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let album = albums[indexPath.row]
let infoController = self.storyboard!.instantiateViewController(withIdentifier: "showInfo") as! ShowInfoViewController
infoController.album = album
self.present(infoController, animated: true, completion: nil)
let historyController = self.storyboard!.instantiateViewController(withIdentifier: "history") as! HistoryViewController
historyController.albums.append(album)
}
P.S. Если просто убрать present, ничего во 2 контроллер не кладется. Заранее спасибо!
Ответы (1 шт):
Логично было бы получать и обновлять данные в самом HistoryViewController при переключении на него. Для этого данные истории можно помещать в какое-то временное (переменную с общим доступом/синглтон) или постоянное хранилище (база данных). Но если вам так хочется обновлять данные напрямую в другом вью контроллере и вы уверены, что он существует на момент уведомления, то здесь лучше воспользоваться механизмом уведомлений или делегирования, информации об этом много.
struct History {
var albums: [Album]
}
Затем при переключении на HistoryViewController эти данные можно брать например во viewWillAppear