2

私のアプリケーションには、多くのMacアプリケーションと同様に、ソースリストがあります。現時点では、これはNSTreeControllerにバインドされたNSOutlineViewです。非常に簡単にアイテムを追加でき、灰色のすべて大文字のヘッダーなどを使用して、「ソースリスト」の外観を複製することもできます。しかし、私を回避する何かがあり、それは私をばかげている。

ツリー内の特定のアイテムに子を追加するにはどうすればよいですか?たとえば、「チーズ」というタイトルのアイテムを作成したとします。「チェダー」と「スイス」という2人の子供をチーズに追加しました。最初の追加メソッドの実行が終了したので、子のリストに「LonghornColby」を追加するにはどうすればよいですか。

私はそれをグーグルで検索しましたが、単純で直接的な答えを見つけることができません。しかし、私が見ることができることから、それは不必要に複雑であり、朝食を食べるのと同じくらい簡単なことをするために議会の行為を要求することに似ています。私が間違っている場合は訂正してください。

アップデート:

サブタイプを使用しているとは思わない。これまで、これまで私がツリーにデータを入力してきた方法は次のとおりです。

[treeController addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                               [NSNumber numberWithBool:YES], @"isSourceGroup",
                               @"CHEESE", @"name",
                               [NSArray arrayWithObjects:
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"Cheddar", @"name",
                                 nil],
                                [NSDictionary dictionaryWithObjectsAndKeys:
                                 @"Swiss", @"name",
                                 nil],
                                nil], @"children",
                               nil]];

「isSourceGroup」ビットは、このアイテムがアウトラインビューのヘッダーの1つであることを示すために使用されます。

4

2 に答える 2

2

これをに変更してみてNSArrayくださいNSMutableArray

[treeController insertObject:longhornColbyDict atArrangedObjectIndexPath:[[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0]];
于 2011-08-17T00:17:12.637 に答える
1

すべてのTypeOfFoodにsubtypes配列を保持するプロパティがあり、そのプロパティがノードの子キーパスとしてツリーコントローラーに設定されていると仮定して、Cheesetype-of-foodinsertObject:inSubtypesAtIndex:メッセージを送信します。(TypeOfFoodクラスにそのアクセサーを実装する必要があります。)

これはKVC準拠のアクセサーであるため、ツリーコントローラーがプロパティの監視を開始すると、KVOはそれをラップします。つまり、アクセサーメッセージの送信は、適切な通知をトリップして適切な副作用を引き起こすのに十分なはずです。つまり、コントローラーを更新し、景色。

ただし、NSTreeControllerを使用したことがないので、この回答を偽造するいくつかの側面を見逃した可能性があります。試してみて、何が起こってもコメントしてください。

于 2010-09-19T14:32:44.990 に答える