Как удалить объект при удалении его из контроллера массива?

У меня есть объект (например, сотрудник) в управляемой объектной модели, который связан с двумя другими объектами (например, отделом и командой). Оба отношения являются отношениями «один ко многим» (т. е. у сотрудника должен быть один отдел и одна команда, у команд и отделов много сотрудников). Они могут пересекаться или не пересекаться (например, команда может состоять из сотрудников отдела кадров, бухгалтерии и ИТ или может состоять только из нескольких сотрудников одного отдела).

Department <-->> Employee <<--> Team    

У меня есть два NSArrayController, предоставляющих данные для двух NSTableView, таблицы отдела и таблицы группы. Сотрудники могут без проблем перемещаться между отделами и между командами, но я не знаю, как удалить (уволить) сотрудника.

Если я отправлю любому из контроллеров массива сообщение об удалении, сотрудник будет исключен из команды (например), но останется в отделе, а граф объектов будет в несогласованном состоянии. Даже если я вызываю действие удаления на обоих контроллерах, объект не удаляется — он становится осиротевшим и просто висит в подвешенном состоянии.

Первоначально у меня были отношения «Отдел и команда» (объекта «Сотрудник»), установленные на правило удаления Nullify, но даже изменение одного или обоих на каскадное не помогает.

Нужно ли мне переопределять действие remove: на контроллерах массива, чтобы фактически удалить сотрудника, или я упускаю что-то действительно очевидное?


person Matthew    schedule 21.10.2009    source источник


Ответы (1)


NSArrayController имеет два разных поведения, когда вы используете Core Data. Если он настроен на простое извлечение объектов непосредственно из контекста управляемого объекта, он будет удалять объекты при их удалении.

Если вы привязываете contentSet к другому контроллеру, как это звучит в данном случае, поведение по умолчанию — просто удалить объект из отношения. Однако, если вы хотите удалить его, есть опция привязки «удаляет объект при удалении», которая даст желаемый результат.

person Alex    schedule 21.10.2009
comment
Такая простая вещь! Я действительно должен был посмотреть на варианты привязки !!! Конечно, мне также пришлось изменить правило удаления с каскадного на аннулирующее! Спасибо Алекс! Я бы проголосовал за ваш ответ, но у меня еще недостаточно очков репутации! :) - person Matthew; 22.10.2009