2009-03-24 3 views
4

일부 MacOS 프로그래밍을 시도하고 NSPopupButton에서 바인딩이 작동하는 방식을 이해하는 데 어려움을 겪고 있습니다. 나는 NSDictionaryController (내가 중간 NSArrayController 필요하다고 생각하지 않지만 그것에 바인딩하는 것이 가장 좋은 방법입니다, 나는 그것에 열려있어)에 관심이 있어요.NSPopupButton을 NSDictionaryController에 바인딩하기

NSMutableDictionary 인 'species'속성을 가진 'db'속성을 가진 컨트롤러 개체를 만들었습니다. 'species'사전에는 키에 대한 ID와 값에 대한 Species 객체가 있습니다. Species 객체에는 description 속성이 있습니다. InterfaceBuilder에서 MyController, NSDictionaryController 및 NSPopupButton을 만들었습니다. Species.descriptions 팝업을 채우고 싶습니다. 이 옵션을 선택하면 해당 ID에 대한 액세스 권한이 필요합니다.

모델 키 경로 'db.species'를 사용하여 'Content Dictionary'를 MyController에 바인드하도록 NSDictionaryController를 설정했습니다. NSPopupButton을 사용하여 컨트롤러 키 'arrangedObjects'와 모델 키 경로를 'value.description'으로 설정하여 NSDictionaryController에 'Content Values'를 바인딩했습니다.

이렇게하면 목록이 채워지는 것 같습니다. 내 주요 질문은 선택을 연결하는 가장 좋은 방법은 무엇입니까. 이상적으로, NSDictionaryController를 사용하여 선택 항목에 액세스 할 수 있도록 선택 항목을 NSDictionaryController에 연결하고 싶습니다. 이 이유 중 하나는 NSDictionaryController에 다른 컨트롤을 연결하여 현재 선택 항목을 볼 수 있기 때문입니다. 그렇지 않다면 MyController 등의 속성에 연결해야합니까? 베스트 프랙티스를 찾고 있습니다. 인터페이스 빌더 메커니즘을 통해 다른 모델과 컨트롤러 디자인을 다른 응용 프로그램에서 쉽게 재사용 할 수 있기를 바랍니다.

NSPopupButton : 지침으로 브라이언의 답변을 사용

업데이트 바인드 내용 NSDictionaryController-> arrangedObjects-> value.description에

바인드 컨텐츠 객체에 NSDictionaryController-> arrangedObjects-> 키

선택된 인덱스를 NSDictionaryController-> selectionIndex에 매핑

바인드 NSDictionaryController-> db.spec ies

모든 것이 작동하는 것 같습니다. [[[컨트롤러 selectedObjects] lastObject] 값으로 컨트롤러에서 객체를 가져올 수 있습니다. 키, 값 쌍을 가진 선택된 객체의 배열에 있습니다.

답변

3

나는 이것을 NSDictionaryController와 함께 시도한 적이 없지만 dict 컨트롤러의 "arrangedObjects.key"및 selectedObject 바인딩에 대한 dict 컨트롤러의 "selection"키에 대한 팝업의 contentObject를 바인딩하려고한다고 생각합니다 . contentObjects 바인딩은 ID를 각 메뉴 항목이 나타내는 기본 객체로 지정합니다. 그런 다음 팝업에서 항목을 선택하면 selectedObject 바인딩이 해당 메뉴 항목에 해당하는 ID를 dict 컨트롤러의 선택 항목으로 설정합니다.

1

팝업을 Species.descriptions로 채우고 싶습니다. 이 옵션을 선택하면 해당 ID에 대한 액세스 권한이 필요합니다. 사전 컨트롤러의 arrangedObjects.key

(-THE 팝업 버튼을 당신을 위해 그렇게 할 것입니다 description 포함되지 않습니다) 사전 컨트롤러의 arrangedObjects.value가 바인드 contentcontentObjects.

자세한 내용은 NSPopUpButton in the Cocoa Bindings Reference을 참조하십시오.

("NSArrayController 인스턴스 ..."로 설명되어 있습니다.) 사전 컨트롤러는 배열 컨트롤러이므로 문제가되지 않아야하지만 컨트롤러의 속성에 바인딩 될 수 있습니다.)

관련 문제