Macos 无法为NSMenuItem(FinderSync扩展名)设置子菜单

Macos 无法为NSMenuItem(FinderSync扩展名)设置子菜单,macos,cocoa,swift,xcode6,xcode6gm,Macos,Cocoa,Swift,Xcode6,Xcode6gm,我正在尝试为Swift/Cocoa中的Finder Sync扩展创建一个级联子菜单。我有以下代码: override func menuForMenuKind(menuKind: FIMenuKind) -> NSMenu! { let m = NSMenu(title: "") let mi1 = NSMenuItem(title: "item1", action: nil, keyEquivalent: "") let mi11 = NSMenuItem(tit

我正在尝试为Swift/Cocoa中的Finder Sync扩展创建一个级联子菜单。我有以下代码:

override func menuForMenuKind(menuKind: FIMenuKind) -> NSMenu! {
    let m = NSMenu(title: "")
    let mi1 = NSMenuItem(title: "item1", action: nil, keyEquivalent: "")
    let mi11 = NSMenuItem(title: "item11", action: nil, keyEquivalent: "")

    let m2 = NSMenu(title: "")
    let mi2 = NSMenuItem(title: "item2", action: nil, keyEquivalent: "")
    m2.addItem(mi2)

    m.addItem(mi1)
    m.addItem(mi11)
    m.setSubmenu(m2, forItem: mi1)
    return m
}
因此,我试图实现的是:

item1->
       item2 
item11
所以我实际上得到的是一个平面的
item1
item11
菜单列表

有什么提示吗


我向苹果(Apple)提交了一个bug(#18810635),得到的回应是它是(#18531883)的一个副本,该副本仍然开放

在OpenRadar上发布了该文件的副本,并在推特上发送给一位开发人员辩护人


如果有人知道#18531883的命运-这是Finder Sync Extensions的核心存在理由?

我已将该项目升级到Swift 2.0,并最终制作了一个子菜单。发布解决方案:

override func menuForMenuKind(menuKind: FIMenuKind) -> NSMenu! {
    let main = NSMenu()
    let submenu = NSMenu()
    let mainDropdown = NSMenuItem(title: "Some option group", action: nil, keyEquivalent: "")
    main.addItem(mainDropdown)
    m.setSubmenu(submenu, forItem: mainDropdown)


    submenu.addItem(NSMenuItem(title: "Option 1", action: nil, keyEquivalent: ""))
    submenu.addItem(NSMenuItem(title: "Option 2", action: nil, keyEquivalent: ""))
    return main
}

这只适用于Mac OS 10.11+,10.10.5仍然存在无法生成子菜单的错误。因此,一个好的方法是为<10.11生成一个平面菜单,并从el capitan开始生成一个级联。

在macOS 10.11之前的版本中,Finder Sync Extensions不支持子菜单

func constructMenu() {
        let main = NSMenu()
        let submenu = NSMenu()
        let mainDropdown = NSMenuItem(title: "Some option group", action: nil, keyEquivalent: "")
        main.addItem(mainDropdown)
        main.setSubmenu(submenu, for: mainDropdown)


        submenu.addItem(NSMenuItem(title: "Option 1", action: nil, keyEquivalent: ""))
        submenu.addItem(NSMenuItem(title: "Option 2", action: nil, keyEquivalent: ""))




       // myList.setSubmenu(mylist2, for: myList)


        statusItem.menu = main
    }
检查
FIFinderSyncProtocol
标题时,代码文档中会说明这一点:

使用特定的菜单项属性:标题、操作、图像和启用从10.11开始:标记、状态和缩进级别也起作用,并且允许使用子菜单


您可以(从控制台)发布日志吗?我遇到了完全相同的问题..嗨!我用你的问题构建了我的子菜单项,并成功地使其工作。#Nuno Gonzales-你是否尝试过在FinderSync扩展中使用它,或者只是在常规子菜单中使用它?我也有同样的问题。有点烦人…有人知道这个问题的最新情况吗?我试图找到OpenRadar上的状态,但它似乎不存在于他们的数据库中。嗨,你知道如何添加一个菜单项,如“移动到Dropbox”菜单项吗?在文档中提到,您需要实现相同的
menuForMenuKind:
方法,将菜单种类作为参数传递给它。从hwere知道我应该用参数调用该方法吗?您没有显式调用它,应该为FIFinderSync接口实现menuForMenuKind:。当您注册目录时,FinderSync将在用户每次打开文件上下文菜单时调用此方法。哦,我明白了。注册目录是什么意思?你能告诉我怎么做吗?或者给我指一个你用过的资源?关于Finder Sync的信息很少。一个Hello World示例在Xcode中作为模板提供。文件->新建->目标,选择应用程序扩展,选择Finder同步扩展。Good luckI已经在处理样板项目,但仍然存在问题。那我就另发一个问题。谢谢
optional func menu(for menu: FIMenuKind) -> NSMenu?