У меня есть модель Core Data, которая состоит из простого дерева конкретной сущности, которая имеет два отношения: parent
и children
. У меня есть NSTreeController
, управляющий моделью, с NSOutlineView
, связанным с NSTreeController
.Как использовать NSTreeController, NSOutlineView и Core Data с «невидимым» корневым элементом?
Моя проблема в том, что мне нужен один корневой объект, но это не должно отображаться в виде контура, только его дети должны отображаться на верхнем уровне структуры. Если я устанавливаю предикат выборки из NSTreeController
в Interface Builder в parent == nil
, все работает отлично, за исключением того, что корневой элемент отображается как элемент верхнего уровня в виде контура.
У моего объекта есть атрибут, isRootItem
, что верно только для корневого элемента.
Моя модель выглядит следующим образом:
видNode 1
|
+-Node 2
| |
| +-Node 5
|
Node 3
|
Node 4
Схема должна выглядеть следующим образом:
Outline View Image http://menumachine.com/quickies/nodes.png
Мне нужно отобразить узлы 2, 3 и 4 на верхнем уровне (Node 1 не должен быть видимым), но все же у их родителя есть «Node 1». Узел 1 имеет значение YES
для isRootItem
, а все остальные имеют NO
.
Если я установил предикат выборки древовидного контроллера на parent.isRootItem == 1
, это отобразит дерево правильно, но как только я добавлю новый элемент на верхний уровень, он терпит неудачу, потому что древовидный контроллер не назначает «невидимый» корень в качестве родительского элемента нового элемента.
Есть ли способ получить комбинацию NSTreeController
/NSOutlineView
, чтобы работать в этой ситуации?
Вы можете написать предикат просто как 'parent.isRootItem' без проверки. – Abizern
Спасибо, ты прав. –