Swift 工具栏、触摸栏和菜单无法识别从AppDelegate启动窗口

Swift 工具栏、触摸栏和菜单无法识别从AppDelegate启动窗口,swift,cocoa,appkit,nswindowcontroller,Swift,Cocoa,Appkit,Nswindowcontroller,我试图通过编程方式从AppDelegate启动一个窗口,特别是从服务提供商启动,但效果不太好,因为工具栏不工作,触摸栏不显示,并且我添加的自定义菜单项被禁用。Apple works提供的默认菜单和菜单项 我的所有视图都是在故事板上创建的。默认主窗口不是从AppDelegate启动的 我像这样打开窗户 guard let windowController = NSStoryboard.main?.instantiateController(withIdentifier: .windowContro

我试图通过编程方式从AppDelegate启动一个窗口,特别是从服务提供商启动,但效果不太好,因为工具栏不工作,触摸栏不显示,并且我添加的自定义菜单项被禁用。Apple works提供的默认菜单和菜单项

我的所有视图都是在故事板上创建的。默认主窗口不是从AppDelegate启动的

我像这样打开窗户

guard let windowController = NSStoryboard.main?.instantiateController(withIdentifier: .windowController) as? WindowController else { return }

windowController.window?.title = data.title
windowController.viewController?.property = data
windowController.showWindow(self)
然而,如果我由segue发起,它将非常有效

guard let splitViewController = NSApp.mainWindow?.contentViewController as? NSSplitViewController,
      let viewController = splitViewController.splitViewItems[1].viewController as? ViewController else { return }

viewController.anotherViewController.performSegue(withIdentifier: .segue, sender: data)
那么,我为什么不这样做呢?因为它从主窗口工作,然后程序启动的窗口阻止代码再次工作。它只在只有一个窗口时工作

我希望它每次都能工作。主窗口是关键窗口还是后续的其他非主窗口并不重要


我如何确保我可以启动一个窗口,并且它也可以被工具栏、触摸栏和自定义菜单项识别,并且不管是否只有主窗口或其他窗口不是主窗口,而是不同类型的窗口。

我误解了
主窗口
属性,当它真正指向聚焦窗口时,认为它指的是实际的主窗口。因此,我真正想要的主窗口是
windows
数组中的第一个窗口

guard let mainWindowController = NSApp.windows.first?.windowController as? MainWindowController,
      let splitViewController = mainWindowController.contentViewController as? SplitViewController,
      let viewController = splitViewController.splitViewItems[1].viewController as? ViewController else { return }

viewController.anotherViewController.performSegue(withIdentifier: .segueIdentifier, sender: data)

菜单项、工具栏和触摸栏正在工作并响应用户交互。

自定义菜单项的目标是什么?你所说的“通过工具栏识别”是什么意思?
windowController
超出范围时是否解除分配?菜单项通过第一响应程序从
NSWindowController
子类
@IBAction func…
连接。工具栏项不工作,我可以单击它们,但什么也没发生。它们不会被禁用,触摸栏也不会显示。就好像我没有实现它一样。你说的“解除分配”是什么意思?窗户不见了?他们没有。我所能描述的最好的情况是,我忘记了通过代理连接工具栏,这将使它正常工作。我没有忘记,因为它们在故事板上连接正确。Segue转换工作正常,但编程失败。对于非基于文档的应用程序,如
NSDocumentController.shared.openUntitledDocumentAndDisplay(false)
NSDocumentController.shared.openDocument(包含以下内容:fileURL,display:true),是否存在类似的情况
NSApp.main窗口并不总是您的主窗口。在
applicationdFinishLaunching
中保存对
NSApp.main窗口的引用如何?