2011-07-06 3 views
1

의 모든 차일, grandchilds 및 grandgrandchilds 내가이 단순화 된 모델을 얻을 수 있습니다 : http://i.imgur.com/EAug3.png는 어떻게 선택 NSTreeController 개체

내가 NSTreeController하여 NSOutlineView에 주문하고 제어 이러한 요소가 있습니다.

그래서 좀 더미 데이터를 생성 :

 
Folder1 
|___ SubFolder1 
    |___Element1 
    |___Element2 
|___ SubFolder2 
    |___SubSubFolder1 
     |___Element3 

문제는 지금 : 내가 폴더 1을 선택하면 Element1이,이 element2, Element3을 보유하고 내가 선택하면 그 Element1이와이 element2를 보유하고 배열을 얻을 수있는 방법 하위 폴더 1?

내 첫 번째 접근 방식은 내 NSTreeController 개체 (그 클래스에 대한 Iderived)의 사용자 지정 속성에 바인딩 된 새 NSArrayController를 만드는 것이었지만 해당 속성은 한 번만 호출되고 이후에는 더 이상 업데이트되지 않았습니다. 내 두 번째 방법은이 술어를 가져 오기 작성했지만, 나는 성공적인 ... :(

어떤 아이디어를 않네?

답변

2

있는지 확인하기 위해 귀하의 구조 변경 사용자 정의 속성에 반영됩니다, 당신은해야합니다 키와 키 패스 간의 종속성을 정의하십시오 (-keyPathsAffectingValueForKey 참조). 그러나 키 패스는 동적 경로를 기반으로하므로 실제로 그렇게 할 수 없거나 계속 증가하는 종속성 목록을 작성하게됩니다.

이렇게하면 수동으로 작업해야합니다. 트리에서 노드를 변경할 때마다 -willChangeValueForKey : 및 -didChangeValueForKey : 메시지를 사용자 지정 트리 컨트롤러 개체를 다시로드하면 트리밍 된 트리 배열이 다시로드됩니다. 실제로 배열을 다시 만들도록하십시오. 나는 당신이 나무를 걷고 그것을 수동으로 평평하게하고 있다고 가정합니다.

+0

죄송 합니다만, 투표 할 수 없습니다 (충분한 평판을 얻지 못함).하지만 THX 문제가 해결됩니다. :) ** - (void) didChangeValueForKey : (NSString *) 키 { if ([key isEqualToString : @ "선택"]) { [자기 didChangeValueForKey : @ "allSubelements"]; } [super didChangeValueForKey : key]; } ** –

+0

안녕하세요 ... 이제 투표 할 수 있습니다 :) –