2011-08-08 2 views
0

Использование NSOutlineView + NSTreeController + Core Data приводит к созданию нечетного плана. Как вы можете видеть на рисунках ниже, схема создает пространство для «Ребенка», когда «Родитель» расширяется, но вместо этого рисует «Ребенок» поверх «Родитель». Я создал кнопку, которая при нажатии вызывает метод [outlineVIew reloadData], который заставляет изображение правильно рисовать.View Based NSOutlineView Рисование детских представлений Atop Parent Views

Основная модель данных:

  • родитель
  • детей
  • IsLeaf
  • имя

Моя установка XIB:

  • NSOutlineView deleg съела установлен, чтобы владелец файла
  • NSTreeController привязан к моим документам контекст Core Data
  • NSTableColumn обязан NSTreeController.arrangedObjects
  • NSTextField привязан к NSTableCellView.objectValue.name

NSPersistentDocument Класс:

- (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; 
} 

Результаты:

Outline View с материнским Collapsed

Outline View With Parent Collapsed

Outline View с материнским Расширенной и ребенка Нарисованные Поверх

Outline View With Parent Expanded and Child Drawn Atop

+0

Где находится «Имя» на скриншоте? Он не отображается в модели. – TechZen

ответ

0

Это не проблема, связанная основных данных. Это что-то в NSTreeController. Даже если модель данных возвращает неправильные значения, они не должны нарисоваться друг над другом.

Контроллер дерева некорректно связан. Он должен иметь только один верхний узел, отображающий «Родительский». Вместо этого он имеет второй верхний узел, отображающий «Имя».