一尘不染

如何在Swift中从另一个ViewController重新加载TableView中的数据

swift

在一个ViewController中,我试图像这样在另一个ViewController中的TableView中重新加载数据:

    (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在navigationController堆栈上的当前ViewController下)。我对应该做什么感到困惑…我觉得应该更容易在不同的视图控制器中引用属性。我可能有点含糊。如果是,请告诉我您需要了解的信息!


阅读 258

收藏
2020-07-07

共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()
}
2020-07-07