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

When deleting a CoreData Object, how to also delete all of its related Objects in Swift5?

我目前正在与 CoreData 合作。

问题: 我有一个 CoreData 实体 Userone-to-many-relationship 到另一个 CoreData 实体 Badges 。我现在正在尝试删除一个用户,显然,我还想删除他所有的徽章

Deleting the User itself is pretty straight forward:

context.delete(selectedUser)

However I have to first delete all of the User's Badges. This is the complicated Part for me:

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

When doing so, this Error occurs: Cannot convert value of type 'NSSet.Element' (aka 'Any') to expected argument type '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)
}

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