I'm a little fuzzy on how the delete rules for relationships in Core Data work, at least beyond the simple cases described in the documentation.
Most of those cases, and most of the answers I've seen for questions here, use a model where the object on left side of a one-to-many relationship "owns" the objects on the right side: e.g. a Person
has PhoneNumber
s, and if you delete the person you delete all their associated numbers. In that kind of case, the solution is clear: Core Data will handle everything for you if you set the relationships like so:
Person --(cascade)-->> PhoneNumber
PhoneNumber --(nullify)--> Person
What I'm interested in is the opposite: A to-many relationship where the "ownership" is reversed. For example, I might extend the CoreDataBooks sample code to add an Author
entity for collecting all info about a unique author in one place. A Book
has one author, but an author has many books... but we don't care about authors for whom we don't list books. Thus, deleting an Author
whose books
relationship is non-empty should not be allowed, and deleting the last Book
referencing a particular Author
should delete that Author
.
I can imagine a couple of ways to do this manually... what I'm not sure of is:
- does Core Data have a way to do at least some of this automagically, as with relationship delete rules?
- is there a "canonical", preferred way to handle this kind of situation?