在我的应用程序中,像许多Mac应用程序一样,我有一个源列表。目前这是绑定到NSTreeController的NSOutlineView。我可以很容易地添加项目,甚至可以复制“源列表”外观,灰色全帽标题和所有。但是,有些事情会让我感到厌恶,这让我感到疯狂。
如何将孩子添加到树中的特定项目?例如,假设我创建了一个名为“Cheese”的项目。我已经给奶酪添加了两个孩子,叫做“Cheddar”和“Swiss”。现在我的初始添加方法已经完成运行,如何将“Longhorn Colby”添加到子项列表中?
我用谷歌搜索了它,但找不到一个简单直接的答案。然而,从我所看到的情况来看,这是不必要的复杂,类似于要求国会采取像吃早餐这样简单的事情。如果我错了,请纠正我。
我不相信我正在使用子类型。到目前为止,这是我如何填充我的树:
[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”位用于表示此项目是大纲视图中的标题之一。
答案 0 :(得分:2)
尝试将NSArray
更改为NSMutableArray
,然后:
[treeController insertObject:longhornColbyDict atArrangedObjectIndexPath:[[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0]];
答案 1 :(得分:1)
假设每个TypeOfFood都有一个包含数组的subtypes
属性,并且该属性在树控制器中设置为节点的子键路径,请将Cheese类型的食物发送给insertObject:inSubtypesAtIndex:
信息。 (您需要在TypeOfFood类中实现该访问器。)
由于这是一个符合KVC标准的访问者,当树控制器开始观察属性时,KVO会将其包装起来,这意味着发送访问者消息应足以使正确的通知跳闸并产生右侧效果 - 即更新控制器和视图。
我没有使用过NSTreeController,所以我完全有可能错过了它的某些方面,这使得这个答案变得虚假。无论发生什么事情,请尝试并评论。