3

나는 국가를 나타내는 NSObject 하위 클래스가 있다고 가정합니다.개체에 바인딩하는 코코아 NSComboBox 값

@interface CountryInfo : NSObject 

@property (nonatomic, retain) NSString *countryName; 

내 모델은 CountryInfo의의 NSMutableArray이 포함되어 있습니다. 배열을 NSComboBox에 바인딩하고 싶습니다. 콤보 상자에는 국가 이름이 표시되고 사용자가 국가를 선택할 수 있어야합니다.

그래서, 난 그렇게처럼 내 .xib을 설정 :

CountryArrayController (NSArrayController)

ContentArray

  • 바인딩 : 파일의 소유자> 모델 키 경로 : 자기 .mountel.countries
,

NSComboBox

내용

  • 바인딩 : CountryArrayController> 컨트롤러 키 : arrangedObjects

콘텐츠

  • 값 에 바인딩 : CountryArrayController> 컨트롤러 키 : arrangedObjects> 모델 키 경로 : COUNTRYNAME

지금까지 너무 좋아. 자, 어떻게 값을 바인딩 할 수 있습니까? 설명서 내용 :

"An NSString or NSNumber that specifies the value of the NSComboBox." 

이게 무슨 의미입니까? 내 모델의 NSString에 이것을 바인딩 할 수 있으며 선택한 countryName을 반영합니다. 하지만 CountyInfo 개체 자체에 바인딩하고 싶습니다! 직접 또는 어레이 컨트롤러의 선택에 바인딩을 통해 : 어떻게 이것을 설정할 수 있습니까?

+0

NSValueTransformer를 사용해 보셨습니까? – macandyp

+0

안녕하세요 @ macandyp, 네 NSValueTransformer 실제로 작동하고 문자열 값에 바인딩하고 코드에서 수동으로 변환하여 동일한 동작을 얻을 수 있습니다. 이 작업을 수행하기 위해 추가 코드를 작성해야한다는 것은 이상한 일이며, 객체에 바인딩 할 수는 없습니다. 감사! – TheNextman

+1

나는 그것이 약간 이상하다고 동의한다. 콘텐츠에 바인딩하고 콘텐츠 값을 바인딩하지 않으면 클래스 설명을 호출하여 콤보 상자의 문자열을 채 웁니다. 그래도 그게 도움이되는지 나는 모르겠다. – macandyp

답변

10

내가 잘못 접근하고 있습니다. 올바른 컨트롤은 NSComboBox이 아니라 NSPopUpButton입니다.

NSComboBox은 사용자가 텍스트를 직접 입력하는 시나리오를 지원해야하기 때문에 다른 동작을합니다. NSPopUpButton은 사전 정의 된 값 세트로만 작동하고 "선택"바인딩에 대해 예상대로 작동하도록 설계되었습니다.