2011-07-06 3 views
1

は、私はこの単純化したモデルを持ってもらうことができます。 はどのように選択NSTreeControllerオブジェクトのすべてのチャイルズ、grandchildsとgrandgrandchilds

は、だから私はいくつかのダミーデータを作成しました:

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

問題は今ある: 私はFolder1にを選択した場合は要素1、エレメント2、エレメント3を保持し、私が選択した場合それは要素1およびエレメント2を保持する配列を取得できますかサブフォルダ1?

私の最初のアプローチは、自分のNSTreeControllerオブジェクトのカスタムプロパティにバインドされた新しいNSArrayControllerを作成することでしたが(そのクラスはIderivedです)、そのプロパティは一度だけ呼び出され、それ以降は更新されません。 私の第二のアプローチは、述語を取得書くことでしたが、私は成功し... :(

任意のアイデアを波平?

答えて

2

ことを確認するためにあなたの構造への変更は、カスタムプロパティに反映されていること、あなたがしなければなりませんキーとキーパスの間の依存関係を定義します(-keyPathsAffectingValueForKey:を参照)。しかし、キーパスは動的パスに基づいているため、実際にはそうすることはできません。

これを手動で行う必要があります。ツリー内のノードを変更するたびに、-willChangeValueForKey:と-didChangeValueForKey:メッセージをカスタムに送信する必要がありますツリーコントローラのオブジェクトを再配置し、その結果、フラット化されたツリー配列が再ロードされます。実際に配列を再作成するようにしてください。私はあなたが木を歩いていると仮定し、それを手動で平坦化します。

+0

申し訳ありません私はあなたに投票することができません(私は十分な評判を持っていません)が、それは私の問題THXを解決します! : ** - (void)didChangeValueForKey:(NSString *)キー{ if([key isEqualToString:@ "selection"]){ [self didChangeValueForKey:@ "allSubelements"]; } [super didChangeValueForKey:key]; } ** –

+0

ねえ...今私はあなたを投票できました:) –

関連する問題