2

在我的应用程序中,与许多 Mac 应用程序一样,我有一个源列表。目前这是一个绑定到 NSTreeController 的 NSOutlineView。我可以很容易地向其中添加项目,甚至能够复制“源列表”外观,带有灰色的全大写标题和所有内容。不过,有些东西让我回避了,这让我发疯了。

如何将孩子添加到树中的特定项目?例如,假设我创建了一个名为“Cheese”的项目。我已经在 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”位用于表示该项目是大纲视图中的标题之一。

4

2 回答 2

2

尝试将其更改NSArrayNSMutableArray,然后:

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

假设每个 TypeOfFood 都有一个subtypes包含数组的属性,并且该属性在树控制器中设置为节点的子键路径,则向 Cheese type-of-food 发送insertObject:inSubtypesAtIndex:消息。(您需要在 TypeOfFood 类中实现该访问器。)

由于这是一个符合 KVC 的访问器,KVO 将在树控制器开始观察属性时包装它,这意味着发送访问器消息应该足以触发正确的通知并引起正确的副作用——即更新控制器和风景。

不过,我没有使用过 NSTreeController,所以我完全有可能错过了它的某些方面,这使得这个答案变得虚假。请尝试并评论发生的任何事情。

于 2010-09-19T14:32:44.990 回答