No entiendo cómo funcionan las reglas de eliminación de relaciones en Core Data, al menos más allá de los casos simples descritos en la documentación.Regla de borrado de datos básicos: relación múltiple, eliminar cuando está vacía
La mayoría de estos casos, y la mayoría de las respuestas que he visto aquí, usan un modelo donde el objeto en el lado izquierdo de una relación uno a varios "posee" los objetos en el lado derecho: p. a Person
tiene PhoneNumber
s, y si elimina a la persona, borrará todos sus números asociados. En ese tipo de casos, la solución es clara: datos básicos se encargará de todo para usted si establece las relaciones de este modo:
Person --(cascade)-->> PhoneNumber
PhoneNumber --(nullify)--> Person
Lo que me interesa es lo contrario: de A a-muchos relación en la que la "propiedad" se invierte. Por ejemplo, podría extender el código de ejemplo de CoreDataBooks para agregar una entidad Author
para recopilar toda la información sobre un único autor en un solo lugar. A Book
tiene un autor, pero un autor tiene muchos libros ... pero no nos importan los autores para quienes no enumeramos libros. Por lo tanto, no se debe permitir eliminar Author
cuya relación books
no está vacía, y eliminar el último Book
que hace referencia a un Author
particular debe eliminar ese Author
.
puedo imaginar un par de maneras de hacer esto manualmente ... lo que no estoy seguro es de:
- hace Core Data tiene una manera de hacer al menos algo de esto automágicamente, al igual que con relación eliminar reglas?
- ¿Existe una forma "canónica" preferida para manejar este tipo de situaciones?
A menos que haya algo más en juego, esto parece fallar en el caso en que, por ejemplo, los dos libros de un autor se eliminan a la vez. Estoy imprimiendo el valor de author.books.count en mi correspondiente prepareForDeletion y es 2 para ambos libros. Entonces el autor nunca se borra. (los nombres de clase han cambiado para coincidir con la pregunta, pero las relaciones son las mismas.) –