Lors de la suppression d'un objet CoreData, comment supprimer également tous ses objets associés dans Swift5?

Nov 28 2020

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

1 MartinR Nov 28 2020 at 18:20

selectedUser.badgesest un NSSetde Badges, vous pouvez donc transtyper ses éléments vers Badgeou vers NSManagedObject:

for badge in selectedUser.badges {
    context.delete(badge as! NSManagedObject)
}

Vous pouvez également lancer le NSSetsur 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».