【问题标题】:Get instance of main window controller in app delegate在应用委托中获取主窗口控制器的实例
【发布时间】:2014-11-29 01:07:54
【问题描述】:

我知道,对于 iOS,您可以像这样从应用委托中引用根视图控制器:

var rootViewController = self.window!.rootViewController

当面向 OS X 时,如何从应用委托中引用主窗口控制器?我想以这种方式传递一个变量(托管对象上下文),因为我已经读过它是引用 moc 的一个很好的解决方案。

【问题讨论】:

    标签: xcode macos swift


    【解决方案1】:

    您可以像这样访问主 NSWindow 的 NSWindowController 实例:

    NSApplication.sharedApplication().mainWindow?.windowController
    

    【讨论】:

    • Swift 3 NSApplication.shared().mainWindow!
    • Swift 4: NSApplication.shared.mainWindow! :)
    • 我建议不要强制展开它,因为如果用户关闭了所有窗口但没有关闭应用程序本身,它可能为零。
    • applicationDidFinishLaunching 中为 nil
    【解决方案2】:

    !在较早的答案中,如果隐藏窗口会导致崩溃,因此我建议像这样缓存窗口或使用计算属性:

    var mWindow: NSWindow? = nil
    func mainWindowCached() -> NSWindow? {
        if let window = NSApplication.shared.mainWindow {
            self.mWindow = window
        }
        return self.mWindow
    }
    

    【讨论】:

      【解决方案3】:

      你可以这样访问:

      NSApplication.shared().mainWindow?.contentViewController as! YourViewController;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 2016-06-28
        相关资源
        最近更新 更多