Использование NSOutlineView + NSTreeController + Core Data приводит к нечетной структуре представления схемы.Как вы можете видеть на изображениях ниже, контурный вид создает пространство для «Дочернего», когда «Родитель» раскрывается, но вместо этого рисует «Дочерний» поверх «Родителя».Я создал кнопку, которая при нажатии вызывает метод [outlineVIew reloadData], который заставляет представление отображаться правильно.
Базовая модель данных:
Моя настройка xib:
- Для делегата NSOutlineView установлено значение «Владелец файла»
- NSTreeController привязан к моим документам Контекст основных данных
- NSTableColumn привязан к NSTreeController.arrangedObjects
- NSTextField привязан к NSTableCellView.objectValue.name
NSPersistentDocument Class:
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
[super windowControllerDidLoadNib:aController];
Node *parent = [self createNodeOfTypeString:@"Node"];
Node *child = [self createNodeOfTypeString:@"Node"];
parent.name = @"Parent";
parent.isLeaf = NO;
[parent addChildrenObject:child];
child.name = @"Child";
child.isLeaf = YES;
[self.treeController addObject:parent];
}
- (id)outlineView:(NSOutlineView *)ov objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return [item representedObject];
}
- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
if ([[item representedObject] isKindOfClass:[Node class]]) {
// Everything is setup in bindings
return [ov makeViewWithIdentifier:@"MainCell" owner:self];
}
return nil;
}
Результаты:
Наброски со свернутым родителем
Схема с расширенным родительским элементом и нарисованным сверху ребенком