iOS. Приемы программирования
Шрифт:
Обратное отношение «один ко многим» — существует между сотрудником и его менеджером. У сотрудника может быть только один непосредственный менеджер, но одному менеджеру могут одновременно подчиняться несколько сотрудников. В данном случае для сотрудника создается отношение «один к одному», однако для менеджера это отношение «один (менеджер) ко многим (сотрудникам)». Поэтому такое отношение и называется обратным.
Обратное отношение «многие ко многим» — возникает между человеком и автомобилем. Одна машина может использоваться несколькими людьми, а один человек может пользоваться несколькими машинами.
В Core Data можно создавать отношения «один к одному», но я категорически не рекомендую этого
Итак, создадим такую модель данных, в которой используются преимущества обратного отношения «один ко многим».
1. Найдите в Xcode файл xcdatamodel, созданный системой в самом начале работы с проектом Core Data. Это было показано во введении к данной главе (создание такого проекта описано в разделе 16.1).
2. Откройте в редакторе файл модели данных, щелкнув на нем кнопкой мыши.
3. Удалите все созданные ранее сущности, выделяя их и нажимая клавишу Delete.
4. Создайте новую сущность и назовите ее Employee (Сотрудник). Создайте для этой сущности три атрибута, которые будут называться firstName (типа String), lastName (типа String) и age (типа Integer 32) (рис. 16.13).
Рис. 16.13. Сущность Employee с тремя атрибутами
5. Создайте сущность под названием Manager (Менеджер) с такими же атрибутами, как и у сущности Employee: firstName (типа String), lastName (типа String) и age (типа Integer 32) (рис. 16.14).
Рис. 16.14. Сущность Manager с тремя атрибутами
6. Создайте новое отношение для сущности Manager. Для этого сначала нужно выбрать данную сущность из списка, а потом нажать кнопку + в нижней части области Relationships (Отношения) (рис. 16.15).
Рис. 16.15. Добавление нового отношения к сущности Manager
7. В качестве имени нового отношения задайте employees (Сотрудники) (рис. 16.16).
Рис. 16.16. Изменение имени нового отношения типа «менеджер к сотрудникам»
8. Выберите сущность Employee и создайте для нее новое отношение. Назовите это отношение manager (рис. 16.17).
Рис. 16.17.
9. Выберите сущность Manager, а потом выделите отношение employees для Manager. В области Relationships (Отношения) выберите параметр Employee (Сотрудник) в раскрывающемся меню Destination (Назначение). Именно так — ведь в этом отношении мы хотим соединить сущности Manager и Employee. В столбце Inverse (Обратные отношения) укажите значение manager (так как отношение manager будет связывать сотрудника (Employee) с менеджером (Manager)). Наконец, установите флажок To-Many Relationship (Отношение ко многим) в инспекторе модели данных (см. раздел 16.1). Результаты приведены на рис. 16.18.
Рис. 16.18. Обратное отношение, установленное между менеджером и сотрудниками
10. Выделите обе сущности (Employee и Manager), выполните команду File — New File (Файл — Новый файл) и создайте классы управляемых объектов для вашей модели, как описано в разделе 16.2.
Создав обратное отношение «один ко многим», откройте. h-файл вашей сущности Employee:
Как видите, в этом файле появилось новое свойство. Оно называется manager и относится к типу Manager. Таким образом, начиная с данного момента мы при наличии ссылки на конкретный объект типа Employee можем получить доступ к свойству manager, а через него — к объекту Manager данного конкретного сотрудника (если менеджер есть). Рассмотрим. h-файл сущности Manager:
Для сущности Manager также создается свойство employees. Тип данных этого объекта — NSSet. Это означает, что свойство employees любого экземпляра сущности Manager может содержать от 1 до N сущностей Employee. В этом и заключается принцип отношения «один ко многим»: один менеджер, несколько сотрудников.