Lors de la suppression d'un objet CoreData, comment supprimer également tous ses objets associés dans Swift5?
Je travaille actuellement avec CoreData
.
Problème: J'ai une CoreData entité utilisateur avec un one-to-many-relationship
à l' autre CoreData entité Insignes . J'essaie maintenant de supprimer un utilisateur et, évidemment, je souhaite également supprimer tous ses badges .
La suppression de l'utilisateur lui-même est assez simple:
context.delete(selectedUser)
Cependant, je dois d'abord supprimer tous les badges de l'utilisateur. C'est la partie compliquée pour moi:
for badge in selectedUser.badges {
context.delete(badge)
}
Ce faisant, cette erreur se produit: Impossible de convertir la valeur de type «NSSet.Element» (alias «Any») en type d'argument attendu «NSManagedObject»
Ma Solution possible: je pensais downcasting simple: context.delete(badge as! NSManagedObject)
. Cependant, je ne suis pas sûr que cela soit possible.
Question: Quelle est la meilleure pratique pour atteindre l'objectif que j'ai décrit ci-dessus? Ou existe-t-il peut-être un moyen CoreData de supprimer récursivement tous les objets associés?
Merci de votre aide.
Réponses
selectedUser.badges
est un NSSet
de Badge
s, vous pouvez donc transtyper ses éléments vers Badge
ou vers NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
Vous pouvez également lancer le NSSet
sur son homologue Swift Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
Mais pour supprimer tous les objets associés si un utilisateur est supprimé, la solution simple consiste à définir la «règle de suppression» pour la relation sur «Cascade».