Подтвердить что ты не робот

Ошибка удаления Coredata, xcode

У меня есть отношение Core Data между двумя объектами, которое выглядит следующим образом:

Entity A                        Entity B
aRelationship <-------------->> bRelationship

Если правило удаления установлено в каскад.

Возможно, у меня это неправильно, но я думал, что если правило удаления для обоих этих отношений было установлено на "Cascade", тогда, когда было сделано следующее...

[context deleteObject:EntityA];

... он также удалит все связанные с ним сущности B. Однако, когда я регистрирую всю свою сущность B, казалось бы, я ошибаюсь.

Может кто-то пролить свет на мое замешательство?

Большое спасибо.

4b9b3361

Ответ 1

Хотя в редакторе графических моделей данных не сразу видно, что каждая взаимно-зависимая связь, то есть каждая

<--> 

... действительно два отдельных отношения, каждый со своим собственным правилом удаления. Правила удаления активируются, когда объект объекта с правилом удаления удаляется.

Итак, если в редакторе модели данных есть два объекта Alpha и Beta с отношением:

Alpha.betas<-->>Beta.alpha

... тогда у вас действительно есть две взаимосвязи:

Alpha.betas--(delete rule)-->>Beta.alpha
Beta.alpha--(delete rule)-->Alpha.betas

Вы никогда хотите настроить правило удаления следующим образом:

Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(cascade)-->Alpha.betas

... потому что удаление любого экземпляра Beta приведет к удалению ассоциированного объекта Alpha, который приведет к удалению всех связанных объектов Beta. В зависимости от деталей вашей модели данных, обратный каскад может случайно удалить большую часть ваших данных.

Что вы действительно хотите:

Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(nullify)-->Alpha.betas

Теперь, когда вы удаляете объект Alpha, он удалит все связанные объекты Beta.

Когда каскад заблокирован, обычно это проблема с требуемой связью. Не могу сказать наверняка без деталей модели данных.

Ответ 2

Это зависит от того, какие правила удаления вы используете.

Вот что сказал Apple в своем документе:

"Когда вы удаляете управляемый объект, важно рассмотреть его и, в частности, правила удаления, указанные для отношения. Если все правила удаления управляемых объектов удаляются являются Nullify, то для этого объекта, по крайней мере, нет дополнительной работы (возможно, вам придется рассмотреть другие объекты, которые были на назначение отношения - если обратная связь была либо обязательный или имел более низкий предел мощности, тогда пункт назначения объект или объекты могут находиться в недопустимом состоянии). Если отношение delete является Cascade, тогда удаление одного объекта может привести к удаление других. Если правило" Запретить ", то перед удалением объекта, вы должны удалить объект или объекты назначения из отношения, иначе вы получите ошибку проверки при сохранении. Если правило удаления -" Нет действий ", вы должны убедиться, что любые шаги необходимы для обеспечения целостности объекта график".

Ссылка "Правила удаления отношений.": http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW1