Модель CoreData с вложенными объектными отношениями в качестве источника данных? - PullRequest
0 голосов
/ 25 апреля 2011

У меня очень простая модель данных, которая состоит из 2 объектов - Section и Item.Каждый Section имеет отношение «многие-многие» к другим объектам Section, а также отношение «один-один» с другим объектом Section.Каждый раздел имеет отношение ко многим Item объектам.

data model

Если оставить в стороне структуру, некоторые объекты Section не имеют объектов Item, а другие (в нижней части иерархии) не имеют дочерних объектов Section.

Я хочу создать табличное представление, которое будет использовать объекты Section для создания заголовков разделов, а затем отобразить объекты Item как tableViewCells, которые являются частью этого Section.Я также хочу, чтобы заголовки таблиц появлялись, если Section не имеет Items, потому что важно видеть иерархию.

Учитывая случайный Section объект, как мне поступить для получения и отображения этих данных?Нужно ли создавать вложенный цикл, который выравнивает данные в массиве, или есть какой-то отличный способ использовать предикаты и NSFetchedResultsController?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011
  1. Установите объект выборки на Item
  2. Обеспечить выборку двух дескрипторов сортировки. Первый должен сортироваться по section.ID, а второй должен сортироваться по id. Это вернет массив Item объектов, отсортированных сначала по разделам, а затем по их собственному атрибуту id.
  3. При инициализации выбранного контроллера результатов установите для параметра sectionNameKeyPath значение section.ID. Это приведет к тому, что имена разделов будут отображаться как значения Section.ID.

Это должно дать вам такую ​​таблицу:

Section.ID
    Item.ID
    Item.ID
    Item.ID
Section.ID
    Item.ID
.... and so on.
0 голосов
/ 25 апреля 2011

Я бы собрал ваш NSFetchedResultsController с дескриптором сортировки, который сортирует элементы по идентификатору раздела.

Что-то вроде:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"section.ID" ascending:YES];

Это даст вашему NSFetchedResultsController все правильные элементы, сгруппированные пораздел.Тогда вам просто нужно конкретизировать источник данных табличного представления и соответственно делегировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...