1

私はこの単純化されたモデルを持っています: http://i.imgur.com/EAug3.png

これらの要素を NSOutlineView で並べ、NSTreeController で制御しています。

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

フォルダ1
|___ サブフォルダー1
     |___Element1
     |___Element2
|___ サブフォルダー 2
     |___SubSubFolder1
         |___Element3

問題は次のとおりです。Folder1 を選択した場合は Element1、Element2、Element3 を保持し、Subfolder1 を選択した場合は Element1 と Element2 を保持する配列を取得するにはどうすればよいですか?

私の最初のアプローチは、NSTreeController オブジェクトのカスタム プロパティにバインドされた新しい NSArrayController を作成することでしたが (そのためのクラスを派生させました)、そのプロパティは 1 回だけ呼び出され、その後は更新されませんでした。私の2番目のアプローチは、フェッチ述語を書くことでしたが、うまくいきませんでした... :(

何か案は?

4

1 に答える 1

2

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

そのため、もう少し手動で行う必要があります。ツリーのノードを変更するたびに、-willChangeValueForKey: および -didChangeValueForKey: メッセージをカスタム ツリー コントローラー オブジェクトに送信する必要があります。これにより、フラット化されたツリー配列のリロードがトリガーされます。実際にアレイも再作成するようにしてください。木を歩いて手動で平らにしていると思います。

于 2011-07-06T19:22:38.187 に答える