У меня есть модель базовых данных, которая имеет три объекта: A, B и C. A имеет отношение один ко многим с B, а B имеет отношение многие ко многим с C. Правило удаления для A -> B - это «Каскад», а B -> A - это «Никаких действий». Правило удаления для B -> C - «Без действий», а C -> B - «Запретить».
У меня проблемы с выполнением удаления объекта A. То, что я хочу, чтобы произошло следующее:
- Я удаляю экземпляр A (используя
deleteObject:
)
- Удаление распространяется на любые B, связанные с A (из-за правила удаления "Cascade")
- Все B, связанные с A, удалены
- Любые отношения, принадлежащие C, чьи связанные B были удалены, также удаляются
Это может немного сбивать с толку, поэтому позвольте мне перефразировать: когда A удалено, удалите все связанные с ним буквы B. И любые C, которые ссылаются на эти B, больше не должны ссылаться на них.
В моем тестировании я не вижу, чтобы у меня вообще работало правило удаления "Каскад". Когда я удаляю A, я сразу после этого вызываю processPendingChanges
(просто чтобы убедиться, что удаление было сделано). Затем я сравниваю количество A и B, которые были в NSManagedObjectContext до удаления и после него. Экземпляр A был должным образом удален (общее количество A теперь на единицу меньше, чем до удаления). Тем не менее, количество B остается неизменным. Таким образом, похоже, что правило удаления «Каскад» не соблюдается.
Я знаю, что могу вручную пройти через отношение A -> B и вручную удалить каждый B. Однако, похоже, что Core Data предоставляет это бесплатно, поэтому я не хочу этого делать, если Core Data не недостаточно. Любая информация, касающаяся использования правил удаления "Cascade", приветствуется.