2011-12-18 2 views
0

Apple's documentation에 따르면 NSOutlineView은보기의 각 항목이 고유해야하지만 실제로 비즈니스 요구 사항에 맞지 않으면 어떻게해야합니까? 특히, 어떻게 이런 식으로 표시합니까?NSOutlineView의 고유하지 않은 항목

Item A 
    -> Item B 
     -> Item E 
    -> Item C 
Item D 
    -> Item B 
     -> Item E 
    -> Item F 

항목 B와 그 하위 항목이 트리에 여러 번 나타나는 방식에 유의하십시오. 물론, 응용 프로그램은 순환 루프가 발생하지 않도록 트리를 제한하여 트리가 유한한지 확인합니다.

NSOutlineView의 하위 클래스는 도움이 될까요? 아니면 완전히 새로운 뷰 클래스를 생성해야합니까?

+0

"Item B"의 두 인스턴스가 모두 동일한 개체이고, 포인터 A와 항목 D가 모두 소유 한 포인터 같음을 의미한다고 가정합니다. –

+0

그래, 맞아. 객체는 솔직하게 선형 트리보다는 그래프를 형성합니다. – Tony

답변

1

NSIndexPath 개체를 개요보기의 항목으로 사용할 수 있습니다. 예를 들어 인덱스 경로 (0, 0)는 항목 A의 항목 B를 나타내고 인덱스 경로 (1, 0)은 항목 D의 항목 B를 나타냅니다.

바인딩은 사용할 수 없습니다. 데이터 소스를 구현해야합니다.

데이터 원본 메서드는 인덱스 경로를 사용하여 모델에서 관련 실제 모델 개체를 가져와야합니다. 모든 데이터 소스 메서드에서 해당 메서드를 사용하는 메서드를 만드는 것이 좋습니다.

또한 개체 삭제를 올바르게 처리해야합니다. 모델 배열 중간에 개체를 삭제하면 끝에있는 이 아닌 인덱스 경로를 삭제해야하며, 중간에있는 개체는이 아닙니다. 사이에 모든 항목 (색인 경로)을 다시로드하도록보기에 지시하십시오.

+0

아마도 NSIndexPath의 하위 클래스는 속성을 프록시 처리하여 바인딩을 사용할 수 있습니까? 좋은 접근법처럼 들리니? – Tony

+0

NSTreeNode는 어떻습니까? 나는 문서를 읽고 있었고, 이런 종류의 작업을하는 것이 옳은 것처럼 보였습니다. 나는 그것을 사용하는 방법을 여전히 실험하고 있습니다. – Tony

+0

@ 토니 : 완벽 해 보인다! 당신은 대답을해야합니다. –