2013-07-29 3 views
0

NSHutlineView에 표시되는 NSTreeNode을 사용하여 파일 및 폴더의 디렉토리 트리 구조를 만들었습니다. 내 문제는 일부 폴더가 비어 있으며이를 표시하지 못하도록하고 싶습니다. 재귀 적으로 트리 구조의 각 요소를 반복하여 요소를 제거하려고 시도했지만 트리를 작성하는 것보다 트리를 작성하는 것이 훨씬 쉽습니다. 내 반복은 루트에서 시작한 다음 트리의 맨 위에 도달 할 때까지 각 노드 하위 노드를 반복합니다. 그러나 일부 폴더에 여러 개의 빈 폴더와 비어 있지 않은 폴더가있을 수 있으므로 효율적이지 않은 요소를 효율적으로 제거하는 것이 어려워집니다. 폴더에 다른 폴더 만 있기 때문에 하위 폴더가 비어 있거나 파일을 포함 할 수 있으므로 폴더를 제거 할 수있는 것은 아닙니다.트리 디렉토리 구조에서 빈 항목을 반복적으로 제거합니다.

나는 나무의 최상위 요소/디렉토리를 찾은 다음 모든 부모 childnodes를 통해 내 rootnode로 거꾸로 반복하고 각 폴더가 비어 있는지 확인해야한다고 생각합니다. 폴더가 비어 있거나 내가 현재있는 폴더 만있는 경우 폴더와 상위 폴더를 제거하고 루트에 도달 할 때까지 계속합니다.

그러나이 기능을 사용할 수 없습니다. 아무도 트리의 상단을 정의하는 요소를 찾는 방법이 있습니까? 또는 NSTreeNode 구조에서 빈 요소를 정렬/제거하는 좋은 방법이 있습니까?

나는이 문제에 대해 도움을 주셔서 감사합니다. 감사. 건배, 트론 의사 코드에서

+0

나는 각 브랜치의 끝으로 가야하고 마지막 폴더가 비어 있으면 제거한 다음 재귀 적으로 트리가 비어있는 폴더를 제거하고 잎이 될 것이라고 생각한다. – trueinViso

답변

1

은 :

BOOL removeTheChildless(NSTreeNode *tree) 
{ 
    for each NSTreeNode *child 
    { 
     if (removeTheChildless(child)) 
      removeChild child from tree 
    } 

    return tree.isLeaf; 
} 

은 "각"mutableChildNodes 기반으로 할 수 있습니다. HTH.

관련 문제