Визуализация разных сущностей в одном NSOutlineView - PullRequest
0 голосов
/ 16 сентября 2011

Допустим, я создаю справочное приложение для животных на основе Core Data.Каждый Animal живет в Habitat и имеет Classification.Classification может иметь суб-Classifications (смоделирован в Базовых данных с использованием простого отношения один-ко-многим родителям / детям.).

Я хотел бы визуализировать все три сущности - Habitats, Classifications и Animals - с использованием одного NSOutlineView.Например, это может выглядеть так:

v Animals
   Cat
   Parrot
   Seagull
   Toucan Sam
v Habitats
   Cereal Box
   Coast
   Jungle
   Living Room
v Classifications
   Mammal
   v Bird
      Tropical Bird
      Fictional Bird

Я могу использовать привязки NSTreeController и Какао, чтобы довольно легко визуализировать одну сущность (с иерархической структурой), такую ​​как Classifications.(И уже сделали это.) Однако для этого необходимо, чтобы столбец таблицы был привязан к одному однородному «типу».

Я думал, что мог бы создать собственный класс, который содержит ссылки на мои объекты NSTreeController,а затем связать столбец таблицы с методом в этом пользовательском классе (выполняя своего рода агрегацию различных arrangedObjects в NSSet самостоятельно).Тем не менее, Xcode, похоже, не хочет, чтобы я связывался с ним (отображает (!) И отказывается разрешить мне устанавливать ключ контроллера в инспекторе привязок).

Как я могу визуализировать более одного объектав одном NSOutlineView?

1 Ответ

0 голосов
/ 18 сентября 2011

У вас есть два варианта:

  1. Использовать суперспособность для Habitats, Classifications и Animals, а затем связать NSTreeController с суперпопулярностью.настраиваемый контроллер.

Для (1) контроллер дерева ищет отношения родитель-потомок.Ключевое имя этого отношения должно быть одинаковым для всех объектов, отображаемых в дереве структуры.Если вы предоставите супер-элемент с ключом-ключом eh, все его элементы будут реагировать на контроллер дерева.

Однако ваша настоящая проблема здесь концептуальная.Вы путаете сущности с управляемыми объектами и пытаетесь создать схему, в которой один уровень иерархии представляет сущности, а другие уровни представляют управляемые объекты.

v EntityName="Animals"
   anAnimalObject.name="cat"
   anAnimalObject.name="Parrot"
   anAnimalObject.name="Seagull"
v EntityName="Habitats"
   aHabitatObject.name="Cereal Box"
   aHabitatObject.name="Coast"
v EntityName="Classifications"
   aClassificationObject.name="Mammal"
   v aClassificationObject.name="Bird"
      aClassificationObject.name.subclassifications.anotherClassificationObject.name="Tropical Bird"

Если вы используете привязки, ваша модель данных будет выглядеть как пользовательский интерфейсв некотором отношении.Ваша модель данных не выглядит так.Модель данных не рекурсивно моделирует сами сущности, поэтому вы не можете использовать только модель данных для отображения сущностей или для отображения объектов, сгруппированных и упорядоченных по сущностям.

Вам потребуется написать собственный контроллер, который будет иметь код для проверки сущности каждого объекта и расположения объекта в правильном месте в иерархии контуров.Вам понадобятся три отдельных выборки, по одной для каждой сущности.

...