0

NSOutlineView に表示したい階層データ モデルがあります。データを提供し、選択と他のビューへのバインドを処理するために、ツリー コントローラーをアウトライン ビューにバインドしています。

ただし、モデル内のデータの一部のみをアウトライン ビューに表示したいだけです。(階層内の各オブジェクトには子オブジェクトの配列がありますが、これらの子オブジェクトの一部のみがツリー内のノードの子ノードとして表示されるようにしたいと考えています。) ツリー コントローラーにフィルター述語をアタッチできたらいいのにと思います。 、しかし NSOutlineView はフィルター述語をサポートしていないようです。

この設計には、データ モデルをフィルター処理するための NSOutlineViewDataSource と、データ ソースとアウトライン ビューにバインドされた NSTreeController が必要だと思います。ただし、ツリー コントローラー (コンテンツ配列、コンテンツ オブジェクト、コンテンツ セットなど) のバインド アウトレットはどれも、データ ソースのバインドに適していないようです。

何か案は?前もって感謝します...

4

2 に答える 2

0

配列コントローラーを介して子オブジェクトの配列にデータを供給してみることができます。

これが私がそれを行う方法です。表現されたオブジェクトのアクセサー メソッドをオーバーライドし、配列コントローラーからフィルター処理された配列を返します。

于 2012-09-05T03:53:47.783 に答える
0

一般に、NS[Outline|Table]ViewDataSource と Cocoa Bindings は「どちらかまたは両方」の選択肢です。アプローチを混在させることは、おそらく厳密には不可能ではありませんが、予測できない結果につながる可能性があります。

フィルタ述語を特定のノードではなくアウトライン ビュー自体にバインドすることについて言及されているので、すべてのノードに対して 1 つのフィルタ述語で「十分」であると推測します。その場合、これに対する 1 つの解決策は、モデルで 2 番目の children-vending プロパティ (おそらくfilteredChildren) を公開し、デフォルト/完全な children-vending プロパティの代わりにそれを使用して子にアクセスするように NSOutlineView に指示することです。ドラッグの並べ替えなどの機能が必要な場合、このアプローチは重要であることが判明する可能性がありますが、それでもこのアプローチを検討するのは簡単なはずです。

ノードごとに異なるフィルターが必要な場合、またはフィルターが動的に変更される場合、このタスクはクロスオーバーして、NSOutlineViewDataSource を実装するのに適したケースになる可能性があります (Cocoa バインディングを使用するのには適していません)。

于 2012-12-05T12:33:09.117 に答える