0

NSOutlineView に表示するNSTreeNodeを使用して、ファイルとフォルダーのディレクトリ ツリー構造を作成しました。私の問題は、一部のフォルダーが空であり、これらを表示から削除したいということです。ツリー構造の各要素を再帰的に反復して要素を削除しようとしましたが、ツリーを解体するよりもツリーを構築する方が明らかに簡単です。私の反復はルートで開始され、ツリーの最上部に到達するまで各ノードの子ノードを反復します。ただし、一部のフォルダーには複数の空のフォルダーと空でないフォルダーが含まれている可能性があるため、空であるかどうかわからない要素を効率的に削除することが難しくなります。フォルダーに別のフォルダーしか含まれていないからといって、子フォルダーが空であるかファイルが含まれている可能性があるため、それを削除できるわけではありません。

ツリーの最上位の要素/ディレクトリを見つけてから、すべての親の子ノードを介してルートノードに向かって逆方向に反復し、各フォルダーが空かどうかを確認する必要があると思います。フォルダーが空であるか、現在のフォルダーのみが含まれている場合は、フォルダーと親フォルダーを削除し、ルートに到達するまで同様に削除します。

しかし、私はこれを機能させることができません。ツリーの頂点を定義する要素を見つける方法はありますか? または、NSTreeNode 構造内の空の要素をソート/削除する良い方法はありますか?

これについて私が得ることができるすべての助けに感謝します。ありがとう。乾杯、トロンド

4

1 に答える 1

1

擬似コード:

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

   return tree.isLeaf;
}

「for each」は に基づくことができますmutableChildNodes。HTH。

于 2013-07-30T23:13:28.953 に答える