2014-12-05 1 views
0

를 업데이트하지 않습니다변경 내가 가진 NSUserDefaults

  1. NSTableView는이 NSTableCellViews로 채워
  2. 각 NSTableCellView은 NSArrayController
  3. 에 바인딩 된 체크 박스, 이미지 및 텍스트
  4. NSTableView는있다 NSArrayController의 내용 배열은 NSUserDefaults의 사전 배열에 바인딩됩니다.

NSTableView는 NSUserDefaults 배열을 읽습니다. 각 체크 상자, 이미지 및 텍스트 항목에 대한 올바른 항목 수와 값을 표시합니다. 그러나 체크 박스를 클릭해도 NSUserDefaults에 저장된 값은 변경되지 않으므로 앱을 다시 열면 전체 테이블이 재설정됩니다.

SO post은 동일한 문제를 제기했지만 어레이 컨트롤러의 바인딩 환경 설정에서 "내용을 복합 값으로 처리"하는 해결책은 나에게 적합하지 않았습니다.

무엇이 누락 되었습니까?

다른 대답이 직접 어레이 컨트롤러를 바인드 된 텍스트 필드를했다 :

답변

-1

여기에 무슨 일이 일어나고 있는지 나는 생각합니다. NSTableCellView을 사용하는보기 기반 테이블보기에는 추가 수준의 간접 지정이 있습니다.

배열 컨트롤러의 내용 배열 요소가 표 셀보기의 objectValue에 할당됩니다. 그런 다음 확인란이 표 셀보기의 objectValue 속성에 바인딩됩니다. 요소가 NSMutableDictionary 개체라고 가정합니다. 따라서 objectValueNSMutableDictionary입니다. 체크 박스를 토글하면 사전에있는 값 중 하나가 변경됩니다. 그러나 이는 표 셀 뷰에서 -setObjectValue:을 호출하는 것과 같지 않습니다. 따라서 테이블 셀 뷰의 바인딩은 배열 컨트롤러에 대한 바인딩을 통해 새 객체 값을 전달할 이유가 없습니다.

내가 설정하면에있는 확인란 바인딩의 "복합 값으로 컨텐츠 처리"고 생각 다음을 통해 새로운 가치를 전달할 것 NSTableCellViewobjectValue 테이블 셀보기에 -setObjectValue: 전화를 강제로, 배열 컨트롤러에 바인딩. 이는 어레이 컨트롤러가 사용자 기본값 컨트롤러에 바인딩 할 때 "콘텐트를 복합 값으로 처리"를 설정하는 것입니다.

체크 박스 속성으로 NSTableCellView의 맞춤 하위 클래스가 필요하다고 생각합니다. objectValue을 통과하는 대신이 속성에 체크 박스를 바인딩하십시오. getter는 objectValue의 관련 속성 (이 예제에서는 allowed 속성을 사용합니다)을 가져옵니다. setter는 실제로 복합 객체를 수정 한 다음 objectValue 속성에 할당하여 바인딩을 강제로 배열 컨트롤러에 다시 쓰게합니다. 따라서 다음과 같은 내용이 있습니다 :

+0

checkbox 값을 objectvalue.key에 바인딩하기위한 "복합 값으로 복합 값 처리"설정이 없습니다. 배열 컨트롤러의 콘텐츠 배열 만 바인딩하면 해당 옵션이 제공됩니다. –

+0

흠. 네가 옳아. 나는 문제의 근원에 대한 나의 분석이 여전히 유효하다고 생각하지만, 나는 다른 해결책을 제안하기 위해 나의 대답을 업데이트했다. –