在一个视图中,我对核心数据数据库进行了一些更改,该数据库显示在主视图控制器的表中。进行这些更改后,我想要显示reloadData()
以显示我添加的新记录,但我找不到一种方法来获取它来调用该函数。
我试过这个:
let window = NSApplication.shared.mainWindow
如果我能够获得窗口,我可能会得到它的视图控制器,但出于某种原因,window
是nil
。我觉得这应该是一个直截了当的事情,但我找不到办法去做。
如果这是不可能的,或者有更好的方法来做我正在尝试的事情,那也是有用的。
编辑:不确定原因,但NSApplication.shared.mainWindow
不再返回nil
,但视图的窗口我实际上正在进行更改(不是主ViewController
窗口)
答案 0 :(得分:1)
我认为您应该使用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)
答案 1 :(得分:1)
一种解决方案是在AppDelegate
var mainViewController : MainViewController?
在viewDidLoad
MainViewController
中设置属性
override viewDidLoad() {
super.viewDidLoad()
let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.mainViewController = self
}
然后你可以从任何地方重新加载表视图
let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.mainViewController?.tableView.reloadData()