разные типы сущностей в одном fetchedResultsController? - PullRequest
1 голос
/ 03 августа 2009

У меня есть UITableView, который отображает два разных типа сущностей - каждая строка может быть либо EntityA, либо EntityB. cellForRowAtIndexPath просматривает тип класса и определяет, как создать ячейку.

Я сохраняю свои объекты с использованием Core Data и хотел бы использовать fetchedResultsController для управления этим табличным представлением из-за преимуществ управления памятью. Тем не менее, я не могу найти способ создать fetchedResultsController, который может выбрать более одного типа объекта. Поскольку инициализатор fetchedResultsController принимает NSFetchRequest, а последний позволяет идентифицировать только одну сущность, я не думаю, что то, что я хочу сделать, возможно.

Если это не так, какие у меня есть альтернативы? Могу ли я сделать что-то вроде наследования одной таблицы, создав модель сущности, которая объединяет функции двух моих сущностей (они похожи)? Это усложнит мой код и значительно ослабит типизацию, но пользователь никогда не узнает разницу.

Все предложения приветствуются.

Спасибо!

/ * AFB 1 011 *

Ответы [ 2 ]

4 голосов
/ 20 сентября 2009

Нет реального способа преодолеть 1 сущность для каждого NSFetchResultsController, используя этот класс.

Однако, если вы все еще хотите воспользоваться преимуществами использования этого класса, который заботится об обработке больших наборов данных, вы можете создать два или более NSFetchedResultsControllers и использовать методы UITableViewDataSourceProtocol для переключения между ними. Это особенно легко, если вы планируете использовать раздел для каждой из сущностей.

1 голос
/ 05 февраля 2010

Вы можете сделать это легко в одном запросе на выборку. Просто используйте наследование сущностей. Пусть EntityA и EntityB являются подклассами некоторой абстрактной сущности, скажем EntityX. Затем установите NSEntityDescription для вашего запроса на выборку для EntityX. Однако не уверен, как указать атрибутные ключи для определенного субэнтита в вашем предикате.

...