NSTreeController
を表すモデルオブジェクトが与えられた場合、ツリー内のインデックスパスをどのように見つけ出し、その後それらを選択しますか?これは盲目的に明らかな問題だと思われますが、私はそれを参照することはできません。何か案は?ない "簡単な" 方法はありません与えられたモデルオブジェクトは、どのようにNSTreeControllerでインデックスパスを見つけるのですか?
8
A
答えて
18
、あなたはツリーノードを歩き、マッチング・インデックス・パスを見つける必要があり、何かのように:
のObjective-C:
カテゴリー
@implementation NSTreeController (Additions)
- (NSIndexPath*)indexPathOfObject:(id)anObject
{
return [self indexPathOfObject:anObject inNodes:[[self arrangedObjects] childNodes]];
}
- (NSIndexPath*)indexPathOfObject:(id)anObject inNodes:(NSArray*)nodes
{
for(NSTreeNode* node in nodes)
{
if([[node representedObject] isEqual:anObject])
return [node indexPath];
if([[node childNodes] count])
{
NSIndexPath* path = [self indexPathOfObject:anObject inNodes:[node childNodes]];
if(path)
return path;
}
}
return nil;
}
@end
スイフト:
拡張
extension NSTreeController {
func indexPathOfObject(anObject:NSObject) -> NSIndexPath? {
return self.indexPathOfObject(anObject, nodes: self.arrangedObjects.childNodes)
}
func indexPathOfObject(anObject:NSObject, nodes:[NSTreeNode]!) -> NSIndexPath? {
for node in nodes {
if (anObject == node.representedObject as! NSObject) {
return node.indexPath
}
if (node.childNodes != nil) {
if let path:NSIndexPath = self.indexPathOfObject(anObject, nodes: node.childNodes)
{
return path
}
}
}
return nil
}
}
-1
このような親アイテムを取得するためにNSOutlineViewを使用しない理由:
NSMutableArray *selectedItemArray = [[NSMutableArray alloc] init];
[selectedItemArray addObject:[self.OutlineView itemAtRow:[self.OutlineView selectedRow]]];
while ([self.OutlineView parentForItem:[selectedItemArray lastObject]]) {
[selectedItemArray addObject:[self.OutlineView parentForItem:[selectedItemArray lastObject]]];
}
NSString *selectedPath = @".";
while ([selectedItemArray count] > 0) {
OBJECTtype *singleItem = [selectedItemArray lastObject];
selectedPath = [selectedPath stringByAppendingString:[NSString stringWithFormat:@"/%@", singleItem.name]];
selectedItemArray removeLastObject];
}
NSLog(@"Final Path: %@", selectedPath);
この出力は以下となります。./item1/item2/item3/...
を私はあなたがここでファイルパスを探していると仮定していますが、データソースが表すものが何であれ調整することができます。
+0
質問は、ツリー内の任意のオブジェクトのNSIndexPathを探しています。そのため、ツリーコントローラのselectedIndexPathをプログラムで変更することができます。オブジェクトがすでに選択されていると仮定しています。もしそうなら、ツリーコントローラからselectionIndexPathを取得するだけです! – stevesliva
関連する問題
- 1. どのようにserver.createインスタンスだけ与えられたCOMオブジェクトを見つけるのですか?
- 2. 隣接行列では、与えられた頂点の隣同士をどのように見つけるか?
- 3. 与えられた式の上限を見つけるには
- 4. 与えられたサブネットのネットワークアドレスを見つける方法は?
- 5. 与えられた出力で最大値を見つける
- 6. 与えられた整数リスト(連続したセグメント)をどのように見つけるか?
- 7. 与えられたXMLファイルで最大のノードを見つけるには?
- 8. 与えられたデータの間の一致を見つける
- 9. 与えられた色の近くの色を見つける
- 10. 与えられたコードの複雑さを見つける
- 11. 与えられたコミットのタグ情報を見つける
- 12. 与えられた日付の曜日を見つける
- 13. 与えられたリストのanagramsを見つける方法
- 14. Gnuplot:与えられたx値のy値を見つける
- 15. 与えられたテーブルの子テーブルを見つける方法
- 16. 与えられたソートベクトルは負から正への遷移を見つける
- 17. 与えられた線に垂直な点を見つける
- 18. 与えられたときにyを見つける
- 19. 与えられた配列から要素を見つけるには?
- 20. Git:与えられたChange-Idでコミットを見つけるには?
- 21. Railsで2つのparent_idを与えられた子を見つけるにはどうすればよいですか?
- 22. 1D配列の複数の最小値インデックスを見つけるにはどうすればよいですか?与えられたマトリックス/アレイについて
- 23. 与えられた数X(例えば、24770)。どのように増分された2の勢力を見つけるのですか?
- 24. Python/Djangoモデルオブジェクトのメモリアドレスはどのようにして見つけられますか?
- 25. 複数のモデルオブジェクトに属するモデルオブジェクトを見つける方法
- 26. リストの最良解で与えられた数のカウントオカレンスを見つける
- 27. SQLで見つからなかったデータレコードはどのようにして見つけられますか?
- 28. 与えられたディレクトリを見つけるコマンド
- 29. Pythonの与えられた点から近点を見つける方法
- 30. 与えられた式の平均/予想時間を見つけるには?
これは本当に非効率的です。私はモデルとtreenodesの間のマッピングを保持するtreecontrollerのサブクラスを書くことを考えています。または、おそらくモデル上のカテゴリで、関連付けられたtreenodeへの参照を保持します。 – Tony
サブクラスで行う必要があるのは、ツリーノードのフラットな 'NSMutableArray'を維持することだけです。もちろん、ノードのすべての変更がアレイに反映されるように注意する必要があります。 –
ええと、モデルオブジェクトかobjectIDを 'NSTreeNode'にマッピングする' NSMutableDictionary'を考えていました。 'NSmutableArray'がbetteRを動かす理由はありますか? – Tony