Основные данные: любой способ получить несколько объектов?
Я только начинаю с Core Data, и в качестве учебного упражнения я создаю приложение, где мне нужно отображать различные типы объектов в одном представлении таблицы.
В качестве примера, скажем, у меня есть сущность для "Сыра" и неродственного объекта для "Пирата". На главном экране моего приложения пользователь должен иметь возможность создать экземпляр "Сыр" или "Пират" для добавления в представление таблицы.
Итак, используя основной редактор данных, я создал объекты для сыра и пирата... однако NSFetchRequest, по-видимому, только позволяет вам получать один тип объекта за раз с помощью:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cheese" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];
Есть ли способ выполнить выборку, которая извлекает все объекты "Сыр" и "Пират"?
Спасибо.
Ответы
Ответ 1
То, что вы пытаетесь сделать, достигается путем определения наследования объектов в вашей модели,
где "DisplayableObject" будет абстрактным классом, определенным как родительский "Сыр" и "Пират".
Затем вы можете выполнить запрос выборки в объекте "DisplayableObject", и он будет извлекать объекты обоих объектов.
Взгляните на эту статью в документации на яблоко: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html
Ответ 2
Мне тоже пришлось разбираться с этой проблемой. Требуется, чтобы иметь возможность искать несколько объектов, но избегать наследования, что приводит к иерархии объектов, которые все хранятся в одном ключевом классе данных, и о проблемах производительности, которые могут возникнуть.
Я решил создать конкретный объект Searchable, который хранит доступные для поиска термины, общие для объектов, к которым я хочу выполнить поиск. Этот объект был добавлен к каждому из классов, которые я хотел найти:
Person.Searchable
Employee.Searchable
Department.Searchable
Для поиска есть поля, такие как searchTerm и многие отношения с каждым из объектов, которые мне нужно искать. И displayName, чтобы информация могла быть показана пользователю без необходимости запрашивать/загружать любую другую таблицу.
Запросы Core Data выполняются с помощью Searchable, поэтому вы запрашиваете только один объект.
Пример:
Person { firstName = Joe, lastName = Jackson } -> searchable { term = joejackson, displayName = Joe Jackson, type = person }
Employee { firstName = Joe, lastName = Smith } -> searchable { term = joesmith, displayName = Joe Smith, type = employee }
Group { name = Joe Development Team } -> searchable { term = joesdevelopmentteam, displayName = Joe Development Team, type = group }
Теперь вы можете перечислить и найти Person, Employee, Department все отдельные таблицы, используя их элемент Searchable, используя один запрошенный контроллер запросов.
Ответ 3
Ответ Tiago действителен, но самый прямой способ сделать это - выполнить два отдельных запроса на выборку, и вы можете либо хранить их в отдельных NSArrays, либо добавлять к одному изменяемому массиву.