Как перезагрузить данные в TableView из другого ViewController в Swift

В ViewController я пытаюсь перезагрузить данные в TableView в другом ViewController, например:

    (self.presentedViewController as! tableViewController).table.reloadData()

Где tableViewController - это класс в контроллере TableView (это не верхний случай верблюда, я знаю), а таблица - TableView. Ну, это приводит к "фатальной ошибке: неожиданно обнаружено нуль при развертывании необязательного значения", и я предполагаю, что это имеет смысл, поскольку "представленный контроллер контроля" еще не загружен. Я также пробовал это:

    (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()
}