2011-12-18 10 views
0

Apple's documentationによれば、NSOutlineViewは、ビュー内の各項目を一意にする必要がありますが、実際にはビジネス要件に合わない場合はどうなりますか?特に、このようなものをどのように表示するのですか?NSOutlineViewの一意ではない項目

Item A 
    -> Item B 
     -> Item E 
    -> Item C 
Item D 
    -> Item B 
     -> Item E 
    -> Item F 

アイテムBとその子がツリーに複数回表示されることに注意してください。もちろん、アプリケーションで循環ループが発生しないようにチェックしてツリーが有限であることを確認します。

NSOutlineViewのサブクラス化は役に立ちますか?あるいは、まったく新しいビュークラスを作成する必要がありますか?

+0

「アイテムB」の両方のインスタンスが同じオブジェクトであり、ポインタAとアイテムDの両方が所有するポインタの均等にまで下がっていることを意味します。 –

+0

そうです。オブジェクトは率直に、線形ツリーではなくグラフを形成します。 – Tony

答えて

1

NSIndexPathオブジェクトをアウトラインビューのアイテムとして使用できます。たとえば、インデックスパス(1,0)はアイテムAのアイテムBを参照し、インデックスパス(1,0)はアイテムDのアイテムBを参照します。

バインディングを使用することはできません。データソースを実装する必要があります。

データソースメソッドは、インデックスパスを使用してモデルから関連する実モデルオブジェクトを取得する必要があります。すべてのデータソースメソッドからそのメソッドを使用するメソッドを作成することをお勧めします。

また、削除するオブジェクトを正しく処理する必要があります。モデル配列の途中でオブジェクトを削除する場合は、末尾のインデックスパスを削除する必要があります。ではなく、その間にあるすべてのアイテム(インデックスパス)を再ロードするようにビューに指示します。

+0

おそらく、NSIndexPathのサブクラスはプロパティをプロキシすることによってバインディングを使用できますか?それは良いアプローチのように聞こえる? – Tony

+0

NSTreeNodeはどうですか?私はドキュメントを読んでいましたが、この種の作業にはちょうど良いと思われますが、私はまだそれを使用する方法を試しています。 – Tony

+0

@トニー:それは完璧に見える!あなたはそれを答えるべきです。 –

関連する問題