Как перезагрузить данные в 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()
}