首页 > 解决方案 > 如何获得对主视图控制器的引用?

问题描述

在一个视图中,我对显示在主视图控制器的表中的核心数据数据库进行了一些更改。进行这些更改后,我想在表格中reloadData()显示我添加的新记录,但我找不到一种方法来获取对它的引用来调用该函数。

我试过这个:

let window = NSApplication.shared.mainWindow

想如果我能得到窗口,我也许能得到它的视图控制器,但由于某种原因windownil. 我觉得这应该是一件直截了当的事情,但我找不到办法。

如果这是不可能的,或者有更好的方法来做我想做的事情,那也很有用。

编辑:不知道为什么,但NSApplication.shared.mainWindow不再返回nil,但我实际上正在更改的视图窗口(不是主ViewController窗口)

标签: swiftcocoa

解决方案


我认为您应该使用 NotificationCenter,如下所示

class MainController:UIViewController {

    @IBOutlet weak var tableview:UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name("dataUpdated"), object: nil)
    }

    deinit {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name("dataUpdated"), object: nil)
    }

    @objc func reload() {
        tableview.reloadData()
    }
}

采用

//在cordata更改后,只需发布​​通知。

NotificationCenter.default.post(name: NSNotification.Name("dataUpdated"), object: nil)

推荐阅读