Развернуть только корневой узел в NSOutlineView

Я пытаюсь решить простую проблему расширения только корневого элемента в моем NSOutlineView, но безуспешно. Я могу развернуть все элементы и выбранные элементы, но я, похоже, не могу понять, как точно определить, как развернуть только корневой узел. Схема показывает дерево папок, и я хочу показать папки, доступные только в корневой папке, но я не хочу расширять дочерние папки.

В настоящее время я пытаюсь установить selectionIndexPath моего NSTreeController, а затем расширить выбор в схеме:

 NSIndexPath *indexPath;
 NSUInteger section = [indexPath indexAtPosition:0];
 NSIndexPath *ip = [NSIndexPath indexPathWithIndex:section];
 [outlineView collapseItem:nil collapseChildren:YES];

 [self.treeController setSelectionIndexPath:ip];
 [outlineView expandItem:[self.treeController selectionIndexPath]];

Это не работает. Предложения о том, как я могу правильно решить эту проблему, очень ценятся.

Привет, Тронд

Решение. Следующая комбинация того, что у меня уже было, и предложения @PaulPatterson отлично работает:

[outlineView collapseItem:nil collapseChildren:YES];
NSIndexPath *indexPath;
NSUInteger section = [indexPath indexAtPosition:0];
NSIndexPath *ip = [NSIndexPath indexPathWithIndex:section];
[outlineView collapseItem:nil collapseChildren:YES];

[self.treeController setSelectionIndexPath:ip];
id node = [[self.treeController selectedNodes] firstObject];
[outlineView expandItem:node];

person Trond Kristiansen    schedule 13.11.2014    source источник


Ответы (1)


Является ли проблема несоответствием между значением, ожидаемым [-NSOutlineView expandItem:], и значением, возвращаемым [-NSTreeController selectionIndexPath]?

В настоящее время вы передаете экземпляр am NSIndexPath в expandItem:. Я ценю, что expandItem: не зависит от конкретного класса, который он ожидает в качестве аргумента (документы утверждают, что он принимает любой объект - id), но мой опыт показывает, что ему нужен объект node - тип объекта, содержащийся в массиве, возвращаемом [-NSTreeController selectedNodes] . Попробуйте следующее:

if ([[self.treeController selectedNodes] count] == 1) {
    id node = [[self.treeController selectedNodes] firstObject];
    [outlineView expandItem:node];
}
person Paul Patterson    schedule 13.11.2014
comment
Спасибо за вашу постоянную помощь в моих вопросах NSOutlineView! - person Trond Kristiansen; 13.11.2014