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:
#import
#import
@class Manager;
@interface Employee: NSManagedObject
@property (nonatomic, retain) NSNumber * age;
@property (nonatomic, retain) NSString * firstName;
@property (nonatomic, retain) NSString * lastName;
@property (nonatomic, retain) Manager *manager;
@end
Как видите, в этом файле появилось новое свойство. Оно называется manager и относится к типу Manager. Таким образом, начиная с данного момента мы при наличии ссылки на конкретный объект типа Employee можем получить доступ к свойству manager, а через него — к объекту Manager данного конкретного сотрудника (если менеджер есть). Рассмотрим. h-файл сущности Manager:
#import
#import
@class Employee;
@interface Manager: NSManagedObject
@property (nonatomic, retain) NSNumber * age;
@property (nonatomic, retain) NSString * firstName;
@property (nonatomic, retain) NSString * lastName;
@property (nonatomic, retain) NSSet *employees;
@end
@interface Manager (CoreDataGeneratedAccessors)
— (void)addFKManagerToEmployeesObject:(Employee *)value;
— (void)removeFKManagerToEmployeesObject:(Employee *)value;
— (void)addFKManagerToEmployees:(NSSet *)values;
— (void)removeFKManagerToEmployees:(NSSet *)values;
@end
Для сущности Manager также создается свойство employees. Тип данных этого объекта — NSSet. Это означает, что свойство employees любого экземпляра сущности Manager может содержать от 1 до
Другой тип отношений, которые, возможно, потребуется реализовать, называется «многие ко многим». По сравнению с отношением Manager к Employee при отношении «многие ко многим» один менеджер может иметь
Рис. 16.19. Создание отношения «многие ко многим» между сущностями Manager и Employee
Теперь, открыв файл Employee.h, вы увидите, что его содержимое изменилось:
#import
#import
@class Manager;
@interface Employee: NSManagedObject
@property (nonatomic, retain) NSNumber * age;
@property (nonatomic, retain) NSString * firstName;
@property (nonatomic, retain) NSString * lastName;
@property (nonatomic, retain) NSSet *managers;
@end
@interface Employee (CoreDataGeneratedAccessors)
— (void)addManagersObject:(Manager *)value;
— (void)removeManagersObject:(Manager *)value;
— (void)addManagers:(NSSet *)values;
— (void)removeManagers:(NSSet *)values;
@end