Swift 如何获取对主视图控制器的引用?
在一个视图中,我对我的核心数据数据库进行了一些更改,该数据库显示在主视图控制器的一个表中。在做了这些更改之后,我想使用table toSwift 如何获取对主视图控制器的引用?,swift,cocoa,Swift,Cocoa,在一个视图中,我对我的核心数据数据库进行了一些更改,该数据库显示在主视图控制器的一个表中。在做了这些更改之后,我想使用table toreloadData()来显示我添加的新记录,但是我找不到一种方法来获取对它的引用以调用函数 我试过这个: let window = NSApplication.shared.mainWindow 我想如果我能得到窗口,我也许能得到它的视图控制器,但由于某种原因,window是nil。我觉得这应该是一件直截了当的事情,但我找不到一个方法来做 如果这是不可能的,或
reloadData()
来显示我添加的新记录,但是我找不到一种方法来获取对它的引用以调用函数
我试过这个:
let window = NSApplication.shared.mainWindow
我想如果我能得到窗口,我也许能得到它的视图控制器,但由于某种原因,window
是nil
。我觉得这应该是一件直截了当的事情,但我找不到一个方法来做
如果这是不可能的,或者有更好的方法来做我想做的事情,那也会很有用
编辑:不知道为什么,但是
NSApplication.shared.mainWindow
不再返回nil
,而是我实际正在进行更改的视图窗口(不是主ViewController
窗口)我认为您应该使用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)
一种解决方案是在
AppDelegate
var mainViewController : MainViewController?
在MainViewController的viewDidLoad
中设置属性
override viewDidLoad() {
super.viewDidLoad()
let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.mainViewController = self
}
然后可以从任何地方重新加载表视图
let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.mainViewController?.tableView.reloadData()
如果让mainViewController=UIApplication.shared.keyWindow.rootViewController作为?MainViewControler{//Call method here.}UIApplication
用于iOS应用程序,对吗?是的。它适用于iOS应用程序。如果让mainViewController=NSApplication.sharedApplication().keyWindow?.contentViewController为?ManinViewController{//Invoke your method here}@Rohi我的应用程序适用于macOS