문제

다음과 같은 사전 배열이 있다고 말합니다.

{
    {
        isoName => en,
        fullName => English,
        localName => English
    },
    {
        isoName => de,
        fullName => German,
        localName => Deutsch
    },
    {
        isoName => fr,
        fullName => French,
        localName => français
    }
}

어떻게 묶을 수 있습니까? fullName nspopupbutton 컨트롤의 값에 대한 값이지만 선택의 값 isoName nsuserDefaults에? 위와 같은 배열로 nsarraycontroller를 설정하고 NSPopupButton이 모델 키 경로를 "fullName"으로 사용하는이 컨트롤러에 바인딩되었지만 유지하고 싶습니다. isoName NSUSERDEFAULTS에서. 이게 가능해? 이것에 접근하는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

먼저, 언어를 나타내는 모델 객체 클래스를 만들고이 사전 쌍은 모델 객체의 속성을 만듭니다. 사전은 제 경험에 따라 바인딩과 잘 작동하지 않습니다. 바인딩 시스템은 실제 모델 객체를 원합니다.

그런 다음 이러한 모델 객체를 유지할 컨트롤러 개체를 만듭니다. 나는 그것을 언어 키퍼라고 부를 것이다. 세 가지 속성이 있습니다.

  • languages (언어 대상의 Nsarray)
  • selectedLanguage
  • selectedLanguageISOName

마지막을 바인딩으로 노출하십시오. 또한 다른 두 속성 중 하나를 다른 속성 중 하나로 만듭니다. 나는 Isoname 속성 파생 상품을 만들 것입니다 : Getter는 돌아올 것입니다. self.selectedLanguage.ISOName, 및 Setter는 주어진 ISO 이름 및 세트에 대한 조회를 수행합니다. self.selectedLanguage 그 언어 대상에. 구현해야합니다 keyPathsForValuesAffectingSelectedLanguage 그리고 keyPathsForValuesAffectingSelectedLanguageISOName, 각 메소드가 반환되는 세트에 다른 속성의 이름을 갖습니다.

먼저 NSARRAYCONTROLLER의 내용 배열 바인딩을 languages 언어 키퍼의 재산.

그런 다음 팝업 버튼에 세 가지 속성을 바인딩합니다.

  • NSARRAYCONTROLLER의 내용 arrangedObjects 속성, 모델 키 경로를 비워 두는 것 (또는 self 이것이 문제를 일으키는 경우)
  • 컨텐츠 값이 동일합니다 arrangedObjects 모델 키 경로가있는 속성fullName
  • 선택한 개체 selectedLanguage 언어 키퍼의 재산

마지막으로, 바인딩 selectedLanguageISOName 언어 키퍼에서 사용자 기본값 컨트롤러의 적절한 속성. (팝업 버튼에 모델 객체 중 하나가 필요하기 때문에 팝업 버튼을 UDC에 직접 바인딩 할 수 없습니다.)

팝업 버튼의 컨텐츠 바인딩을 isoNameS 및 내용 값에 대한 컨텐츠 값 fullName배열에있는 사전의 s이지만, 원시 객체를 모델 객체로 사용하는 것에 대해 매우 불신합니다. 나는 과거에 그로부터 너무 많은 문제가있었습니다. 게다가, 모델 객체를 사용하는 것은 장기적으로 돈을 지불하며 함께 일하는 것이 훨씬 재미 있습니다.

위의 모든 내용을 제자리에두면 다음과 같은 일이 있습니다.

사용자는 팝업 버튼의 값을 변경합니다
  1. 팝업 버튼은 선택한 객체 속성의 값을 변경합니다.
  2. 그것은 변화합니다 selectedLanguage 언어 키퍼의 재산.
  3. 다른 속성을 변경합니다 (selectedLanguageISOName) 언어 키퍼의.
  4. UDC를 통해 사용자 기본값의 값이 변경됩니다.
다른 객체는 사용자 기본값의 값을 변경합니다
  1. UDC는 변경된 값에 대한 알림을 게시합니다.
  2. 그것은 변화합니다 selectedLanguageISOName 언어 키퍼의 재산.
  3. 다른 속성을 변경합니다 (selectedLanguage) 언어 키퍼의.
  4. 이는 팝업 버튼의 선택된 객체 속성의 값을 변경합니다.
  5. 사용자는 새로운 선택을 봅니다 fullName 팝업 메뉴에서.

이 답변의 일부를 이해하지 못하면 설명을 요청하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top