Несколько контроллеров выборки (и, возможно, несколько объектов) - неправильный подход. Правильное решение - использовать параметр sectionNameKeyPath
для NSFetchedResultController
, чтобы сгруппировать результаты в несколько разделов. Если вы думаете о своих объектах по-разному, возможно, они на самом деле являются одним и тем же объектом, и вместо этого вы можете использовать свойство itemType, которое затем можно будет разделить (и вы также должны отсортировать его). Например. скажем, у меня были сущности Hops и Grains, тогда я мог бы изменить их на Ingredient и иметь свойство int_16 attributeType, которое затем я использовал в коде для перечисления значений hopType = 0
, grainType = 1
. Ведь ингредиент - это просто имя и вес, которые оба они разделяют.
Если, однако, ваши сущности действительно имеют отдельный набор свойств, то правильное решение состоит в том, чтобы создать родительскую абстрактную сущность, которая имеет свойство, которое вы можете использовать для секционирования, например, sortOrder, sectionID или тип. Затем, когда вы создаете контроллер выборки и извлекаете абстрактную родительскую сущность, вы фактически получаете результаты, содержащие все дочерние сущности. Например, в приложении Notes есть абстрактная сущность NoteContainer, в которой есть дочерние объекты Account и Folder. Таким образом, они могут использовать один контроллер выборки для отображения учетной записи в первой ячейке раздела, а затем иметь все папки в следующих ячейках. Например. Все iCloud Notes (на самом деле это учетная запись), затем Notes (это папка по умолчанию), затем все пользовательские папки, затем папка корзины. Они используют свойство sortOrder, папка по умолчанию - 1, все пользовательские папки - 2, а корзина - 3. Затем, добавив это в качестве дескриптора сортировки, они могут отображать ячейки в нужном им порядке. Это немного отличается от вашего требования, потому что у них есть 2 сущности, смешанные в разные секции, но вы все равно можете использовать его только с разными свойствами сортировки.
Мораль этой истории - не борись за рамки, обними ее: -)