Wie kann man beim Löschen eines CoreData-Objekts auch alle zugehörigen Objekte in Swift5 löschen?
Ich arbeite gerade mit CoreData
.
Problem: Ich habe einen CoreData Entity- Benutzer mit einem one-to-many-relationship
zu einem anderen CoreData Entity- Abzeichen . Ich versuche jetzt, einen Benutzer zu löschen und möchte natürlich auch alle seine Abzeichen löschen .
Das Löschen des Benutzers selbst ist ziemlich einfach:
context.delete(selectedUser)
Ich muss jedoch zuerst alle Benutzerausweise löschen. Dies ist der komplizierte Teil für mich:
for badge in selectedUser.badges {
context.delete(badge)
}
Dabei tritt folgender Fehler auf: Der Wert vom Typ 'NSSet.Element' (auch bekannt als 'Any') kann nicht in den erwarteten Argumenttyp 'NSManagedObject' konvertiert werden.
Meine mögliche Lösung: Ich dachte an einfaches Downcasting : context.delete(badge as! NSManagedObject)
. Ich bin mir jedoch nicht sicher, ob dies möglich ist.
Frage: Was ist die beste Vorgehensweise, um das oben beschriebene Ziel zu erreichen? Oder gibt es eine CoreData-Methode, um alle zugehörigen Objekte rekursiv zu löschen?
Danke für Ihre Hilfe.
Antworten
selectedUser.badges
ist ein NSSet
von Badge
s, daher können Sie seine Elemente zu Badge
oder zu NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
Sie können das auch NSSet
auf das Swift-Gegenstück übertragen Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
Um jedoch alle zugehörigen Objekte zu löschen, wenn ein Benutzer gelöscht wird, besteht die einfache Lösung darin, die "Löschregel" für die Beziehung zu "Kaskade" festzulegen.