Самый простой способ: внедрить willSave
в свой класс сущностей Департамента (вы даете каждой сущности свой собственный класс, верно? *), Пусть ваш отдел проверит себя на наличие [self isDeleted] == NO
и [[self person] count] == 0
и удалит себя, если это так. (Проверка isDeleted
не является обязательной, поскольку объект, изменяющий себя внутри willSave
, запускает другой вызов willSave. Документы для NSManagedObject willSave
содержат дополнительную информацию.) Это откладывает удаление до тех пор, пока контекст не будет сброшен на диск. , которая не должна быть огромной проблемой.
Если вам нужно, чтобы Департамент удалил себя в тот момент, когда последний человек покинул его, попросите ваше подразделение Департамента наблюдать за собой с KVO. Зарегистрируйте его в качестве наблюдателя на собственное свойство person в awakeFromFetch
и awakeFromInsert
и отмените регистрацию в willTurnIntoFault
. Когда свойство person изменяется, проверьте его на пустое. Это больше работы, поэтому попробуйте только если первый способ не работает для вас.
Наконец, помните, что для правила удаления отношений между сотрудником и отделом необходимо установить значение «обнулять» (при удалении сотрудника оно удаляется из сотрудников отдела), а не «никаких действий» (при удалении сотрудника вы принимаете ответственность за самоочищение Отдела) или «каскад» (когда удаляется любое Лицо, удаляется и его Отдел!)
(* MOGenerator - очень хороший помощник для поддержки классов для каждой сущности. http://rentzsch.github.com/mogenerator/)