Документация говорит о том, что вы используете выборку, чтобы найти набор управляемых объектов на основе какого-либо атрибута, а затем вы находите все связанные объекты, проходя отношения.Это существенно отличается от того, как вы найдете данные в реляционной базе данных.Поскольку отношения жестко закодированы при построении графа объектов, их обход очень и очень быстр по сравнению со выборкой, и вы можете моделировать произвольные отношения.
Вы редко, если вообще когда-либо, использовали выбранные свойства, чтобы найти управляемый объект, который вы могли быпросто иди к.Извлеченные свойства используются для поиска объектов, к которым вы не можете перейти, например, объектов, хранящихся в другом файле постоянного хранилища.
Для обхода отношений вы используете ключевые пути.Например, чтобы найти всех сотрудников конкретной компании в вашей модели, вы должны использовать ключевой путь teams.employees
и начать с определенного объекта компании.Чтобы найти разработчиков, вы должны пройти путь до атрибута Role
, который содержит значение developer
, что-то вроде: team.employees.role.roleType
.
В вашем конкретном случае, если вам нужна таблица со всеми разработчиками, вы бы не устанавливали выборку для сущности Company
, а для сущности Employee
.Вы можете использовать предикат с путем ввода ключа, например role.roleType== developer
.Если вам нужны все разработчики в определенной компании, вы должны использовать предикат вроде: `role.roleType == developer AND team.company.name == aCompanyName.
Однако было бы еще лучше настроить вашу модель следующим образом:
Company<-->>Team<-->>Employee<<-->Role
Теперь у вас есть объект Role
, который может назначать одну и ту же роль многим сотрудникам.Теперь вы можете получить сущность Role
с помощью простого ключевого пути roleType== developer
, и вы получите один объект обратно.Пройдя по employees
отношению Role
, вы получите всех сотрудников разработчиков.
Важная вещь, которую следует помнить с Core Data, заключается в том, что сущности и их отношения предназначены для имитации реальных объектов, событий и условий, с которыми имеет дело ваше приложение.Вы должны настроить модель данных так, чтобы как можно точнее представить эти реальные вещи и отношения между ними.Например, в реальном мире developer
- это всего лишь одна роль, поэтому она должна быть представлена только одним объектом в графе объектов.В реальном мире многие сотрудники могут выполнять роль разработчика, поэтому отношения между Employees
и Roles
должны быть Employee<<-->Role
.
Чем ближе ваша модель имитирует реальность, тем легче становится ваше приложение.пиши во всех отношениях.