Я не думаю, что текущая версия NSTreeController требует атрибутов, которые на самом деле называются "children" и "parent".Вы можете использовать setChildrenKeyPath:
, чтобы установить дочерний путь к любому имени атрибута (при условии, что атрибут реализует иерархию родительский-дочерний.) Я уверен, что это довольно старое требование.(Возьмите это с крошкой соли, я когда-то не использовал контроллер дерева. См. Ниже)
Что касается других ваших вопросов:
(1) Да
(2) Да, да и да
(3) Отношения поддерживаются в истинных атрибутах, например, свойстве.Граф сущности / объекта отделен от виртуального графа, который виртуализируют свойства parent-child.Поскольку родительские и дочерние атрибуты на самом деле не имеют значений, любое изменение в реальных значениях немедленно отражается в их возвращении и наоборот.Короче говоря, вам не нужно беспокоиться о них.
(4) Да, контроллер дерева будет наблюдать виртуальные свойства, а не реальные.Если виртуальные свойства не соответствуют KVO, контроллер не будет работать.
(5) Исторически NSTreeController считался ошибочным.Он существует с IIRC 2004 года и никогда не работал хорошо.Многие старые руки просто игнорируют это.Я не использовал его в течение некоторого времени.
(6) Обычно вы кешируете только те данные, которые вряд ли сильно изменятся.Если выборка используется для фактического обновления модели или ожидается, что обновит модель что-то другое, например, запрос URL, то вам не следует использовать кеш.