Ответ 1
Я, конечно, не эксперт по Core Data, но читаю документацию по различным параметрам правила удаления, мне кажется, что вы хотите отношение B → C Nullify, а не Без действий. Возможно, Bs не уходят, потому что Cs все еще держат ссылки на них?
У меня есть модель Core Data, которая имеет три объекта: A, B и C. A имеет отношение "один ко многим" с B, а B имеет отношение "многие ко многим" с C. Правило удаления для A → B - "Каскад", а B → A - "Нет действий". Правило удаления для B → C - "No Action", а C → B "Deny".
У меня возникают проблемы с удалением по объекту A. Я хочу, чтобы это произошло:
deleteObject:
)Это может быть немного запутанным, так что позвольте мне перефразировать: когда A удаляется, удалите все связанные B. И любой C, который ссылается на эти B, больше не должен ссылаться на них.
В моем тестировании я не вижу, чтобы правило удаления Cascade для меня вообще. Когда я удаляю A, я вызываю processPendingChanges
сразу после этого (просто чтобы убедиться, что удаление выполнено). Затем я сравниваю число A и B, которые были в NSManagedObjectContext перед удалением, и после него. Экземпляр A был удален правильно (число A теперь меньше, чем до удаления). Однако число B остается неизменным. Таким образом, кажется, что правило удаления "Каскад" не соблюдается.
Я знаю, что могу вручную переходить через отношения A → B и вручную удалять каждый B. Однако похоже, что это то, что Core Data предоставляет бесплатно, поэтому я не хочу этого делать, если Core Data не будет недостаточно. Любая информация об использовании правил удаления "Каскад" приветствуется.
Я, конечно, не эксперт по Core Data, но читаю документацию по различным параметрам правила удаления, мне кажется, что вы хотите отношение B → C Nullify, а не Без действий. Возможно, Bs не уходят, потому что Cs все еще держат ссылки на них?
Основываясь на
Любые связи, принадлежащие C, ассоциированные с B, были удалены, также удаляются Предполагает, что B-C также должен иметь Cascade.
Кроме того, если B удален, то C также следует удалить. Снова Каскад.
т. Отношение Bs к A равно Nullify. C к B - Nulllify. Таким образом, когда C удаляется, B НЕ удаляется. И когда B удаляется; A НЕ удаляется.
Как и в этом выигрышном рисунке.
A --- → B Каскад < ---- Nullify
B --- → C Cascade < ---- Nullify