我正在使用
对于所有对象,实现方法都相同:我已经实现了指定子项、子项计数以及对象是否为叶子的方法。这些方法对所有对象(包括那些未显示的孙子:
在轮廓视图中,前两个级别的一切都显示正确。但是孙子们从来没有显示过,我没有扩展它们的选项来查看它们。我只能看到CBMovie和CBDiscs。
我想知道是否有其他设置我错过了,关于NSTreeControllers或NSOutlineView配置中节点可以展开多深。
下面是其中一个节点的实现。每个节点类都有不同的路径到其子项,这在-(NSArray*)children方法中指定(正确调用)。
这是我如何填充NSOutlineView(基于单元格)。我不使用数据源方法,而是通过编程进行绑定。
NSTreeController
来填充一个NSOutlineView
。
NSTreeController
是一个三级层次结构的控制器(CBMovie、CBDisc和CBEpisode),但在轮廓视图中只显示前两个级别。对于所有对象,实现方法都相同:我已经实现了指定子项、子项计数以及对象是否为叶子的方法。这些方法对所有对象(包括那些未显示的孙子:
CBEpisode
)都被正确调用。在轮廓视图中,前两个级别的一切都显示正确。但是孙子们从来没有显示过,我没有扩展它们的选项来查看它们。我只能看到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];
NSTreeController
可以表示层次结构的深度没有明确的限制,因此您可以排除这个可能原因。如果您发布一个演示应用程序来展示问题,我的猜测是,在您提供它后30分钟内就会有解决方案。即使这需要您付出一些努力,但从长远来看,这可能是值得的。另外,Core Data 是否参与其中? - Paul Patterson