删除CoreData对象时,如何在Swift5中删除其所有相关对象



我目前正在使用CoreData

问题:我有一个带有one-to-many-relationship的CoreData实体用户到另一个CoreData徽章。我现在正试图删除一个用户,很明显,我也想删掉他的所有徽章

删除用户本身是非常直接的:

context.delete(selectedUser)

但是,我必须首先删除所有用户徽章。这对我来说是复杂的部分:

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

执行此操作时,会出现以下错误:无法将类型为"NSSet.Element"(又名"Any"(的值转换为预期的参数类型"NSManagedObject">

我可能的解决方案:我在考虑简单的下转换:context.delete(badge as! NSManagedObject)。然而,我不确定这是否可能。

问题:实现上述目标的最佳实践是什么?或者有没有一种CoreData的方法可以递归地删除所有相关的对象?

谢谢你的帮助。

selectedUser.badgesBadgeNSSet,因此可以将其元素强制转换为BadgeNSManagedObject:

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

您还可以将NSSet转换为Swift对应的Set:

for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}

但是,为了在删除用户时删除所有相关对象,简单的解决方案是将关系的"删除规则"设置为"级联"。

最新更新