Отображение зафиксированных и доступных для редактирования объектов в Исходном Списке

2 ответа

Я работаю над приложением, которое имеет точно такое же поведение, и вот как я это делаю:

У меня есть 5 основных сущностей в моей базовой модели данных:

  1. AbstractItem - абстрактная сущность, которая имеет атрибуты, общие для всех элементов, такие как имя , вес и редактируемый . Также имеет два отношения: родительский (отношение к одному к AbstractItem ) и потомки (отношение ко многим к AbstractItem и инверсия родительского ).
  2. Группа - конкретный дочерний объект AbstractItem .
  3. Папка - конкретный дочерний объект AbstractItem . Добавляет отношение «многие ко многим» к базовому объекту Item .
  4. SmartFolder - конкретный дочерний объект папки . Добавляет двоичный атрибут predicateData . Переопределяет аксессор отношения "items" папки папки , чтобы возвращать результаты выполнения запроса выборки с предикатом, определенным атрибутом predicateData .
  5. DefaultFolder - конкретный дочерний объект из SmartFolder . Добавляет строковый атрибут идентификатор .

Для элементов раздела «Библиотека» я вставляю объекты DefaultFolder и даю им уникальный идентификатор, чтобы я мог легко их извлекать и различать их. Я также даю им NSPredicate , который соответствует тому, что Items они должны показывать. Например, «Музыка» DefaultFolder будет иметь предикат для получения всех музыкальных элементов, «Подкасты» DefaultFolder будут иметь предикат для получения всех элементов подкастов и т. Д.

Элементы корневого уровня (" Library "," Shared "," Store "," Genius "и т. Д.) - это элементы Group с родителем nil . Для групп и папок, которые нельзя редактировать, их атрибут editable установлен на NO .

Что касается фактического получения этого материала в вашем outlineView, вам необходимо реализовать ] NSOutlineViewDataSource и NSOutlineViewDelegate протоколируются самостоятельно. Здесь просто слишком много поведенческой сложности, чтобы выкачать ее через NSTreeController . Однако в моем приложении

7
ответ дан 2 December 2019 в 00:58
поделиться

Не добавляйте чушь в свой набор данных просто для поддержки представления. Это не только идет вразрез с шаблоном проектирования MVC, но и добавляет ненужную сложность (то есть «больший потенциал для ошибок») к единственной наиболее важной части: управлению пользовательскими данными.

Тем не менее, использование привязок в этом конкретном сценарии является причиной столько трения. Почему бы не отказаться от привязок полностью? Я думаю, вы на правильном пути, используя протокол NSOutlineViewDataSource, но вы не зашли достаточно далеко. Вместо этого полностью полагайтесь на этот (все еще совершенно действующий и в некотором смысле превосходный) протокол.

Вы бы по сути обменяли простоту настройки (и легкость уведомления об изменениях) на полный контроль над древовидной структурой.

5
ответ дан 2 December 2019 в 00:58
поделиться