【发布时间】:2015-05-08 11:45:14
【问题描述】:
我正在用NSTreeController 填充NSOUtlineView。
NSTreeController 是一个 3 级层次结构控制器(CBMovie、CBDisc 和 CBEpisode),但大纲视图中仅显示前 2 级。
所有对象的实现都是相同的:我已经实现了指定子级、子级计数以及对象是否为叶子的方法。为所有对象正确调用了这些方法(对于那些未显示的对象,孙子:CBEpisode)。
在大纲视图中,前 2 个级别的所有内容都正确显示。但是孙子永远不会显示,我没有选择扩大他们的父母来看到他们。我只能看到 CBMovie 和 CBDiscs。
我想知道我是否缺少另一个设置,即节点可以在 NSTreeControllers 或 NSOutlineView 配置中扩展多深。
下图:三个节点之一中的实现。 每个节点类都有不同的路径到它的子节点。这是在 -(NSArray*)children 方法中指定的(正确调用)。
-(NSArray*)children
{
return [[self Episodes] allObjects];
}
-(int)childrenCount
{
return [[self Episodes] count];
}
-(BOOL)isLeaf
{
return ![[self Episodes] count];
}
日志代码的输出。数据源 NSTreeController 似乎具有正确的结构。
CBMovie
CBDisc
CBEpisode
CBEpisode
CBMovie
CBDisc
CBDisc
CBDisc
CBDisc
CBMovie
CBDisc
CBEpisode
CBEpisode
这就是我填充 NSOutlineView(基于单元格)的方式。我不使用数据源方法,但我以编程方式绑定它。
NSMutableDictionary *bindingOptions = [[NSMutableDictionary alloc] initWithCapacity:2];
if (metadata.valueTransformer) {
[bindingOptions setObject:metadata.valueTransformer forKey:NSValueTransformerNameBindingOption];
}
[bindingOptions setObject:[NSNumber numberWithBool:NO] forKey:NSCreatesSortDescriptorBindingOption];
[bindingOptions setObject:[NSNumber numberWithBool:NO] forKey:NSRaisesForNotApplicableKeysBindingOption];
[newColumn bind:@"value" toObject:currentItemsArrayController withKeyPath:[NSString stringWithFormat:@"arrangedObjects.%@", metadata.columnBindingKeyPath] options:bindingOptions];
【问题讨论】:
-
你能分享一些代码吗?
-
从你的描述我看不出有什么问题。您能否提供更多细节,例如您的树节点的实现?
-
@renfei 我的树节点都继承自同一个类。您需要更准确地了解什么?
-
@StefanArentz 我在树节点中添加了用于树实现的唯一代码
-
@renfei 好的。确实这就是我发布它的原因,因为我不知道。你需要什么样的额外细节?我需要一些线索
标签: objective-c macos cocoa