Как перезагрузить данные в TableView из другого ViewController в Swift
в ViewController я пытаюсь перезагрузить данные в TableView в другом ViewController, например:
(self.presentedViewController as! tableViewController).table.reloadData()
где tableViewController-это класс в контроллере TableView (это не верхний регистр верблюда, я знаю), а table-это TableView. Ну, это дает "фатальную ошибку: неожиданно найдено nil при разворачивании необязательного значения", и я думаю, что это имеет смысл, так как" presentedViewController " еще не загружен. Я также пытался это:
(self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - 2] as! tableViewController).table.reloadData()
который дал тот же результат (я убедился, что tableViewController находится под текущим ViewController в стеке navigationController). Я не знаю, что мне делать...Я чувствую, что должно быть проще ссылаться на свойства в разных контроллерах представления. Я могу быть немного расплывчатым; если это так, скажите мне, что вам нужно знать!
1 ответов
Xcode 9 * Swift 4
создать имя уведомления:
extension Notification.Name {
static let reload = Notification.Name("reload")
}
вы можете разместить уведомление
NotificationCenter.default.post(name: .reload, object: nil)
и добавьте наблюдателя в контроллер вида, который вы хотите перезагрузить данные:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(reloadTableData), name: .reload, object: nil)
}
@objc func reloadTableData(_ notification: Notification) {
tableView.reloadData()
}