Я немного размышляю о том, как работают правила удаления для отношений в Core Data, по крайней мере, за исключением простых случаев, описанных в документации.
В большинстве этих случаев и в большинстве ответов, которые я видел для вопросов здесь, используется модель, в которой объект с левой стороны отношения «один ко многим» «владеет» объектами с правой стороны: например, Person
имеет PhoneNumber
с, и если вы удаляете человека, вы удаляете все связанные с ним номера. В таком случае решение очевидно: базовые данные будут обрабатывать все для вас, если вы установите отношения следующим образом:
Person --(cascade)-->> PhoneNumber
PhoneNumber --(nullify)--> Person
Что меня интересует, так это обратное: отношения «многие-многие», когда «собственность» меняется на противоположную. Например, я мог бы расширить пример кода CoreDataBooks, добавив сущность Author
для сбора всей информации об уникальном авторе в одном месте. У Book
есть один автор, но у автора много книг ... но нас не волнуют авторы, для которых мы не перечисляем книги. Таким образом, удаление Author
, чье отношение books
не является пустым, не должно быть разрешено, а удаление последнего Book
, ссылающегося на конкретный Author
, должно удалить это Author
.
Я могу представить пару способов сделать это вручную ... в чем я не уверен:
- У Core Data есть способ сделать хотя бы часть этого автоматически, как с правилами удаления отношений?
- существует ли "канонический", предпочтительный способ справиться с такой ситуацией?