swift - 如何获得对主视图控制器的引用?
问题描述
在一个视图中,我对显示在主视图控制器的表中的核心数据数据库进行了一些更改。进行这些更改后,我想在表格中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)
推荐阅读
- mysql - 在 mysql 中不允许使用 FETCH 子句。改用什么替代方法
- python - django密码验证是否应该不起作用
- python - 更 Pythonic 的方式来做到这一点?
- jsp - 基于 tomcat 表单的身份验证出现错误 408
- terraform - 如何从状态文件中的主要版本降级 Terraform
- c# - 为什么有些无人机不动?
- jboss - Wildfly 堆栈跟踪日志记录格式预先添加战争名称
- report - 行号 RDLC 报告
- database - 查询 OrientDB 时出错:无法查询 demodb 数据库
- sqlite - 是否可以在 SQLite 中进行多个查询?