sectionNameKeyPath через несколько отношений - PullRequest
5 голосов
/ 20 сентября 2010

Я работаю над приложением, которое использует Core Data и NSFetchedResultsController. Настройка модели выглядит следующим образом:

/-----------\          /-----------\          /-----------\
|Part       |          |Kit        |          |Source     |
|-----------|          |-----------|          |-----------|
|name       |          |name       |          |name       |
|dimensions |          |description|          |location   |
|...        |          |...        |          |...        |
|-----------|          |-----------|          |-----------|
|kits       | <<-\     |source     | <<-----1 |kits       |
|           |     \->> |parts      |          |           |
\-----------/          \-----------/          \-----------/

Таким образом, Part имеет отношение «многие к любому» с Kit (часть может быть в одном или нескольких наборах, а набор может содержать одну или несколько частей). И каждый Kit происходит от Source, который может обеспечить один или несколько Kit s.

В настоящее время я создаю UITableView, в котором используется NSFetchedResultsController с простым списком всех Part объектов. Я хотел бы сгруппировать части в разделы, где каждый раздел будет иметь имя Source. I.e.:

|-------------------------------|
|Source One                     |
|-------------------------------|
|Part One                       |
|Part Two                       |
|Part Three                     |
|-------------------------------|
|Source Two                     |
|-------------------------------|
|Part Four                      |
|Part Two                       |
|Part Five                      |
|....                           |
|-------------------------------|
|             O                 |
|-------------------------------|

Поскольку Part может поступать из нескольких Source с, возможно ли сделать это с помощью NSFetchedResultsController с помощью sectionNameKeyPath, или мне нужно сделать это совершенно другим способом?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 марта 2015

Вы можете получить этот результат, используя NSFetchedResultsController для отношений «многие ко многим»

См. Этот ответ: Как работать со связями «многие ко многим» с NSFetchedResultsController?

И пример проекта: https://github.com/dmathewwws/Many-to-Many-CoreData

0 голосов
/ 03 августа 2011

Я так не думаю, потому что NSFetchedResultsController не будет знать, какой Kit использовать для сортировки Part s, так как это отношение многие-многие.

Подумайте о древовидном представлении или даже о структуре наследования Objective-C, где каждый дочерний узел имеет ровно одного родителя, но сам по себе может иметь много дочерних узлов. Вы можете легко восстановить дерево от дочернего узла до его родительского узла. Но если бы у ребенка могло быть много родителей, он по сути не знал бы, какого родителя выбрать при повторном подборе «дерева» (которое больше похоже на график).

Итак, в вашей модели данных у Part s должно быть много Kit s? Потому что если вы измените отношение «многие-многие» между Kit и Part на отношение «ко-многим», где у Kit может быть много Part с, а у Part может быть только один комплект, то вы можно установить sectionNameKeyPath для NSFetchedResultsController в @"kit.source.name" для сортировки по имени, и все будет работать нормально.

Конечно, я не знаю точно, как работает ваше приложение, если вам действительно нужно много-много отношений между Kit и Part, но если вы это сделаете, то вы, вероятно, не сможете использовать NSFetchedResultsController, и должен был бы реализовать выборку Source s и реализацию UITableViewDataSource методов самостоятельно: (

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