Al eliminar un objeto CoreData, ¿cómo eliminar también todos sus objetos relacionados en Swift5?
Actualmente estoy trabajando con CoreData
.
Problema: Tengo un CoreData Entidad usuario con una one-to-many-relationship
a otra Entidad CoreData Distintivos . Ahora estoy intentando eliminar un usuario y, obviamente, también me gustaría eliminar todas sus insignias .
Eliminar el usuario en sí es bastante sencillo:
context.delete(selectedUser)
Sin embargo, primero tengo que eliminar todas las insignias de usuario. Esta es la parte complicada para mí:
for badge in selectedUser.badges {
context.delete(badge)
}
Al hacerlo, se produce este error: no se puede convertir el valor del tipo 'NSSet.Element' (también conocido como 'Cualquiera') al tipo de argumento esperado 'NSManagedObject'
Mi Posible solución: Yo estaba pensando en downcasting sencilla: context.delete(badge as! NSManagedObject)
. Sin embargo, no estoy seguro de que esto sea posible.
Pregunta: ¿Cuál es la mejor práctica para lograr el objetivo que describí anteriormente? ¿O tal vez hay una forma CoreData de eliminar de forma recursiva todos los Objetos relacionados?
Gracias por tu ayuda.
Respuestas
selectedUser.badges
es una NSSet
de Badge
s, por lo tanto, puede convertir sus elementos Badge
ao para NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
También puedes lanzar el NSSet
a su contraparte Swift Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
Pero para eliminar todos los objetos relacionados si se elimina un usuario, la solución simple es establecer la "Regla de eliminación" para la relación en "Cascada".