Базовые данные — проблема с правилом удаления

У меня странная проблема с правилами удаления в coredata. Моя модель данных не такая сложная. Я подробно описываю здесь только отношения между элементами:

A
----------
has_many B (optional, delete rule : Cascade)
has_many C (optional, delete rule : Cascade)

B
----------
has C (optional, delete rule : Cascade)
inv_A (delete rule : Nullify)

C
----------
has B (optional, delete rule : Nullify)
inv_A (delete rule : Nullify)

Когда я удаляю B, связанный C не удаляется. Похоже, правило каскадного удаления не работает...

У вас есть намек на то, что я делаю неправильно?

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ

Это была просто проблема с обновлением. Глупый вопрос... Никогда не забывайте: A) обновить данные в базе после сохранения B) перезагрузить таблицу с этим новым результатом выборки (или использовать NSFetechedResultController)


person kheraud    schedule 28.04.2011    source источник


Ответы (1)


Правило удаления всегда применяется к удалению другого объекта. Таким образом, когда вы удаляете объект C, отношение has C гарантирует, что B также будет удалено. Однако, наоборот, отношение has B настроено только на аннулирование, вот что оно делает.

Чтобы прояснить ситуацию, подумайте об этом следующим образом: если бы у вас было только одно отношение, скажем, B ссылается на C, что означает, что B имеет поле для объекта типа C. Единственная разумная вещь, которую может означать правило удаления, это решение вопроса что делать с указанным полем, если объект, на который оно указывает, нужно удалить.

person Raphael Schweikert    schedule 28.04.2011
comment
Странно… Я только что увидел ваше редактирование: вы уверены, что ваш вопрос правильно напоминает вашу модель данных? Если это так, ваш объект C должен (как я объяснил) только аннулироваться, а не удаляться при удалении связанного с ним объекта B… - person Raphael Schweikert; 28.04.2011
comment
Хорошее прояснение ситуации. Это отличный способ подумать об этом! - person Chris Cooper; 15.10.2011