Я заселяю NSOUtlineView
с помощью NSTreeController
.NSOutlineView показывает только первые 2 уровня иерархии NSTreeController
NSTreeController
представляет собой трехуровневый иерархический контроллер (CBMovie, CBDisc и CBEpisode), но только первые 2 уровня отображаются в виде схемы.
Реализация одинакова для всех объектов: я реализовал методы для указания детей, подсчета детей и если объект является листом. Эти методы правильно называются для всех объектов (также для тех, которые не отображаются, внуки: CBEpisode
).
В обзоре схемы все отображается правильно для первого уровня 2. Но внуки никогда не отображаются, у меня нет возможности расширить их родителей, чтобы увидеть их. Я могу видеть только CBMovie и CBDiscs.
Мне интересно, есть ли еще одна настройка, которую мне не хватает, о том, насколько узкие узлы могут расширяться в конфигурациях NSTreeControllers или NSOutlineView.
Ниже: Реализация в одном из трех узлов. Каждый класс узла имеет другой путь к своим дочерним элементам. Это указано в методе children (NSArray *) (правильно назван).
-(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 Мои узлы дерева наследуются от одного класса. Что вам нужно знать более точно? – aneuryzm