2014-10-14 5 views
25

Swift/Cocoa에서 Finder 동기화 확장을위한 계단식 하위 메뉴를 만들려고합니다.NSMenuItem (FinderSync 확장자)에 대한 하위 메뉴를 설정할 수 없습니다.

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 

그래서 내가 실제로 얻을 것은 평면 item1item11 메뉴 목록 나는 다음과 같은 코드가 있습니다.

힌트가 있습니까?


나는, 애플 (# 18810635)에 버그를 제출 여전히 열려의 중복 (# 18531883)하다는 응답을 얻었다.

OpenRadar http://openradar.appspot.com/radar?id=5772557445758976에 파일 복사본을 게시하고 개발자 지지자에게 트윗했습니다.

누군가가 운명을 안다면 # 18531883 - 이것이 Finder Sync Extensions의 핵심 요소입니까?

+0

로그를 게시 할 수 있습니까 (콘솔에서)? 나는 똑같은 문제를 겪고 있습니다. – qdot

+0

안녕하세요! 내 하위 메뉴 항목을 작성하는 데 귀하의 질문을 사용하고 그것을 관리 할 수있었습니다. –

+0

# Nuno Gonzales - FinderSync 확장 프로그램이나 일반 하위 메뉴에서 사용해 보셨습니까? – qdot

답변

2

저는 프로젝트를 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는 여전히 하위 메뉴를 생성 할 수없는 버그가 있습니다. 그러므로 좋은 appraoch는 < 10.11에 대한 플랫 메뉴와 el capitan에서 시작하는 캐스케이드를 생성합니다.

+0

안녕하세요, * Dropbox * 메뉴 항목 [여기] (http://i.imgur.com/C9Fzbif.png)으로 이동과 같은 메뉴 항목을 추가하는 방법을 알고 있습니까? 문서에서는 메뉴 종류를 인수로 전달하는 동일한'menuForMenuKind :'메소드를 구현해야한다고 언급합니다. 당신은 매개 변수로 그 메소드를 호출해야한다는 것을 알고 있습니까? – Isuru

+0

명시 적으로 호출하지 않고, menuForMenuKind :는 FIFinderSync 인터페이스 용으로 구현되어야합니다. 디렉토리를 등록 할 때 FinderSync는 사용자가 파일 컨텍스트 메뉴를 열 때마다이 메소드를 호출합니다. –

+0

아, 알겠습니다. 디렉토리를 등록하면 무엇을 의미합니까? 어떻게하는지 말해 줄 수 있니? 또는 내가 사용한 리소스를 가르쳐 주시겠습니까? Finder 동기화에 대한 정보가 부족합니다. – Isuru