Macos 从appdata中的menuitem加载情节提要

Macos 从appdata中的menuitem加载情节提要,macos,swift,cocoa,storyboard,statusbar,Macos,Swift,Cocoa,Storyboard,Statusbar,这一定比我想象的要简单得多 我有一个Main.storyboard,在应用程序加载时启动。我有一个系统菜单,其中一个菜单项需要加载脚本对话框 func applicationDidFinishLaunching(aNotification: NSNotification) { // Insert code here to initialize your application statusBarItem = statusBar.statusItemWithLength(-1)

这一定比我想象的要简单得多

我有一个Main.storyboard,在应用程序加载时启动。我有一个系统菜单,其中一个菜单项需要加载脚本对话框

func applicationDidFinishLaunching(aNotification: NSNotification) {
    // Insert code here to initialize your application

    statusBarItem = statusBar.statusItemWithLength(-1)
    statusBarItem.menu = menu
    statusBarItem.title = "WP"


    var options = NSMenuItem(title: "Options ...", action: nil, keyEquivalent: "")
    var quit = NSMenuItem(title: "Quit", action: Selector("terminate:"), keyEquivalent: "q")

    menu.addItem(options)
    menu.addItem(quit)

}

选项变量“action”需要加载情节提要。我是否可以在AppDelegate中访问它

如果我理解正确,您的应用程序看起来完全是一个状态栏应用程序(启动时没有出现窗口?)

所以基本上你需要实例化,然后打开窗口。也许是这样的

在“
ApplicationIDFinishLaunching
”函数中:

    var menuItem : NSMenuItem = NSMenuItem()
    menuItem.title = "Options ..."
    menuItem.action = Selector("bringUpOptionsWindow:")
    menuItem.target = self
    menuItem.keyEquivalent = ""
    menuItem.enabled = true
    menu.addItem(menuItem)

// ...
// and then later on
// ...

func bringUpOptionsWindow(sender : AnyObject)
{
    let storyboard = NSStoryboard(name: "Main", bundle: nil)

    let myController = storyboard.instantiateControllerWithIdentifier("MyOptionsWindowController") as! NSWindowController

    myController.showWindow(sender)
}

当你说“加载故事板”时,你的意思是想从故事板加载NSWindowController(或子类)吗?它是来自故事板的NSWindowController。实际上它可以正常工作。它出现了,然后马上就消失了。内存管理器会清理它吗?如果我让控制器成为appdata成员,它会工作的!