删除 CoreData 对象时,如何在 Swift5 中同时删除其所有相关对象?
When deleting a CoreData Object, how to also delete all of its related Objects in Swift5?
我目前正在与 CoreData
合作。
问题: 我有一个 CoreData 实体 User 与 one-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.badges
是 Badge
的 NSSet
,因此您可以将其元素转换为 Badge
或 NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
您还可以将 NSSet
转换为对应的 Swift Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
但是为了在删除用户时删除所有相关对象,简单的解决方案是将关系的“删除规则”设置为“级联”。
我目前正在与 CoreData
合作。
问题: 我有一个 CoreData 实体 User 与 one-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.badges
是 Badge
的 NSSet
,因此您可以将其元素转换为 Badge
或 NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
您还可以将 NSSet
转换为对应的 Swift Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
但是为了在删除用户时删除所有相关对象,简单的解决方案是将关系的“删除规则”设置为“级联”。