1

NSTableView에서 NSDictionary의 일부 항목을 보여주고 싶은 몇 가지 시나리오가 있습니다. (NSDictionaryController에 대한 나의 본능은 항상 모든 객체가 copyWithZone을 구현할 필요성에 의해 좌절되며, 유용성에 치명적일 수밖에없는 터무니없는 요구 사항입니다 ...)NSArrayController를 NSDictionary allValues에 바인딩하기

대신에 NSArrayController는 NSDictionary의 allValues ​​속성에 배열의 객체에 대한 다양한 속성을 테이블의 각 열에 바인딩합니다. 그러나 배열 컨트롤러의 컨트롤러 키 및 모델 키 경로 속성을 통해 Cocoa에서이 바인딩을 지정하는 올바른 방법을 찾을 수 없습니다.

배열을 allValues에 직접 바인딩하려고하면 배열 컨트롤러의 arrangedObjects 속성이 항상 비어 있습니다. 개체가 사전에 추가 된 경우에도 [dictionary willChangeValueForKey : @ "allValues"] 및 [ 사전 didChangeValueForKey : @ "allValues"] 객체를 추가 한 후 배열 컨트롤러에서 setContent :를 호출 한 후에도 호출됩니다. 물론

는,이 스택 오버플로 스레드 발견

Binding to an NSDictionary's "allValues" array

을 ... 그리고 다양한 버전을 시도 @ 모델 키 경로 필드에 "allValues ​​@", 그러나 아무도는 원하는 결과를 생성하지 않습니다.

그래서 여기 내 질문 : 개체에 바인딩 된 ArrayControllerOne 있고 ArrayControllerOne.selection 내에서 NSDictionary 속성의 allValues ​​속성 ("인스턴스")에 바인딩하려면 ArrayControllerTwo 싶습니다, 내가 무엇을 입력해야합니까 컨트롤러 키 및 모델 키 경로 필드? 사전에

감사합니다 ...

+0

사전이 다른 배열 컨트롤러의 선택 항목 일 때 allValues에 바인딩하려는 이유가 명확하지 않습니다. 네가하려는 일을 상상하기가 힘듭니다. 어떤 종류의 데이터가 arrayController1에 바인딩되어 있는지를 예를 들어 설명하면 도움이 될 것입니다. – rdelmar

+0

내 시나리오에서 사전은 "다른 어레이 컨트롤러의 선택 사항"이 아닙니다. 그것은 단지 클래스 인스턴스의 멤버입니다. 즉, 사전에 구성원이있는 객체가 있고 사전에 각 * value *에 대한 정보가 반영된 표를 각 열에 표시하려고합니다. 또한 사용자가 테이블에서 행을 선택하고 행이 나타내는 사전 값에 액세스 할 수있게하고 싶습니다. 이 두 가지 작업을 수행하려면 my_obj.my_dict.allValues에 바인딩 된 배열 컨트롤러를 만들고 배열 컨트롤러의 항목 속성에 바인딩 된 열이있는 테이블을 만들고 싶습니다. –

답변

2

난 당신이 딕셔너리를 사용하여 사전의 allValues에 어레이 컨트롤러의 내용 배열을 결합 할 수있다. 발견하기 때문에 당신은 하나를 놓친하지해야합니다 @ allValues ​​(따옴표)를, 어디 dict는 사전의 특성 이름입니다. 왜이 기능이 작동하는지, 잘 모르겠습니다.이 문서는 찾을 수 없습니다.

나는 새 키 - 값 쌍을 사전에 추가하면 self.dict = _dict; 테이블 뷰를 업데이트하려면.

+0

예, 시도했습니다. 이 작업을 수행 할 때 배열 컨트롤러의 arrangedObjects 배열에는 사전에 몇 개의 항목이 있는지에 관계없이 단일 개체가 포함됩니다. (어떤 종류의 객체인지는 Cocoa 디버거의 한계로 인해 알 수 없습니다.) 그 구문은 allValues ​​접근 자 메소드를 호출하지 않고 arrangedObjects에 결과를 표시하는 것이 아니라 단순히 allValues ​​접근자를 arrangedObjects에 할당하는 것입니다 . –

+0

이상하게 들리며, 정상적으로 작동하고 테이블보기가 사전의 각 값에 대해 올바른 개체를 보여줍니다. 아마도 코드에 뭔가 다른 문제가있을 것입니다. 간단한 사전만으로도 그랬습니다. – rdelmar

+0

나는 다시 시험해보고 다시보고 할 것이다.귀하의 공헌에 감사드립니다. –