Я сталкиваюсь с проблемой при попытке выполнить приложение Master-Detail с использованием настройки Master (NSOutlineView + NSTreeController) и Detail (NSOutlineView + NSTreeController).
Вот простейшее приложение на основе примера приложения Abstract-Tree от Apple.
https://s3.amazonaws.com/applicationtests/AbstractTree-MasterDetail.zip
В основном у меня есть левый браузер проектов, использующий узлы дерева, и правый браузер деталей, показывающий детальное дерево, которое зависит от выбора браузера проекта.
Моя установка тривиальна.
Мастер NSOutlineView связывается с Мастером NSTreeController, обрабатывающим объектный объект сущности CoreData.
Detail NSOutlineView связывается с Detail NSTreeController, обрабатывающим подробный узел сущности CoreData.
Они оба деревья.
Объект «Узел проекта» имеет узел «Связь с деталями», что позволяет дереву проекта отображать дерево подробностей в зависимости от выбора.
Проблема, с которой я сталкиваюсь, - это когда я связываю contentObject в деталях NSTreeController с выбором основного NSTreeController:
Подробности NSTreeController contentObject привязывается к главному NSTreeController selection.detailNode
Каждый раз, когда я изменяю выделение в главном древовидном представлении структуры, деталь NSTreeController создает узлы NSTreeControllerTreeNodes, которые никогда не освобождаются.
Обычно при каждом изменении выбора главного контроллера деталь NSTreeContrller создает новый набор новых объектов NSTreeControllerTreeNode, который никогда не освобождается.
Посмотрите на инструмент Распределение инструментов, каждый раз, когда вы меняете выбор, создаются новые узлы. Даже после удаления всех мастер-узлов узлы по-прежнему выделяются.
Я пытался подготовить NSViewController для перезагрузки нового файла пера с изменением выбора главного контроллера, но мне кажется, что это большие издержки.
Кто-нибудь знает, как утилизировать созданные NSTreeControllerTreeNodes, когда привязка contentObject изменяется на другое значение?
Спасибо.