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