0

GeometryShape 엔티티를 처리하는 NSArrayController이 있습니다. GeometryShape은 다음을 포함합니다 : name, type, color. LineShape은 이고 다음을가집니다. beginPositionX, beginPositionY, endPositionX, endPositionY. CircleShapeGeometryShape이고 다음을가집니다. positionX, positionY, radius. NSTableView 및 NSTabView와 다른 엔터티를 바인딩하는 방법은 무엇입니까?

NSTableView

각 열 arrangedObjects & 키 이름 바인딩 NSArrayController, 모든 삽입 된 형태를 도시한다.

선 모양을 선택하면 해당 탭의 속성이 기본 탭인 선 탭에 표시됩니다.

이제 원 모양을 선택하면 서클 탭을 선택하고 원 속성을 표시하려고합니다.

... 해당 모양을 선택한 모양 유형에 따라 해당 탭이 선택되고 해당 모양 속성이 표시됩니다.

어떻게이 우수한 모델을 얻을 수 있습니까?

enter image description here

답변

0

나는 당신이 arrayController의 기반으로 새 selectedIndex의를 NSTableViewDelegate를 구현하고 프로그램 선택의 변경, 당신은 단지 tabView의 함께 IBOutlet을 잡아 때 tableViewSelectionDidChange:의 구현 내에서 해당 탭을 선택하고 할당 할 거라고 생각 선택.

또는 tabView의 selectedIndex 값을 어레이 컨트롤러의 선택 항목에 바인딩 할 수 있지만 선택 항목 id을 적절한 클래스를 반영하는 NSUInteger으로 변환하는 사용자 정의 값 변환기가 필요합니다.

어느 구현에서든지 isKindOfClass을 사용하는 코드를 작성하고 정수로 매핑합니다.

또한 selection.class의 어레이 컨트롤러 키 패스로 탭보기의의 selectedLabel을 결합 할 수 있습니다하지만 난 NSValueTransformer docs에 설명 된대로 NSStringFromClass()을 감싸는 valuetransformer을 필요 여전히 당신을 추측하고있어. 클래스를 문자열로 변환하는 완전히 비 코드적인 방법이 있습니다. 그렇지만 selectedLabel을 바인딩 할 수는 있습니다.

개인적으로 사용자 정의 값 변환기를 구현하는 것을 좋아하지 않습니다. IB에 묻혀있는 동작을 구현할 수있는 코드를 작성하기 때문입니다. 사용자 정의 tableview 대리자에 살 수있는 코드를 작성하지 않으려 고합니다.