Подтвердить что ты не робот

Основные данные: любой способ получить несколько объектов?

Я только начинаю с Core Data, и в качестве учебного упражнения я создаю приложение, где мне нужно отображать различные типы объектов в одном представлении таблицы.

В качестве примера, скажем, у меня есть сущность для "Сыра" и неродственного объекта для "Пирата". На главном экране моего приложения пользователь должен иметь возможность создать экземпляр "Сыр" или "Пират" для добавления в представление таблицы.

Итак, используя основной редактор данных, я создал объекты для сыра и пирата... однако NSFetchRequest, по-видимому, только позволяет вам получать один тип объекта за раз с помощью:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cheese" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];

Есть ли способ выполнить выборку, которая извлекает все объекты "Сыр" и "Пират"?

Спасибо.

4b9b3361

Ответ 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, либо добавлять к одному изменяемому массиву.