【发布时间】:2020-11-28 10:44:29
【问题描述】:
我目前正在使用CoreData。
问题:我有一个 CoreData 实体用户,其 one-to-many-relationship 指向另一个 CoreData 实体徽章。我现在正在尝试删除一个用户,显然,我还想删除他的所有徽章。
删除用户本身非常简单:
context.delete(selectedUser)
但是我必须先删除所有用户的徽章。这对我来说是复杂的部分:
for badge in selectedUser.badges {
context.delete(badge)
}
这样做时,会出现以下错误:无法将类型“NSSet.Element”(又名“Any”)的值转换为预期的参数类型“NSManagedObject”
我可能的解决方案:我正在考虑简单的向下转换:context.delete(badge as! NSManagedObject)。但是我不确定这是否可能。
问题:实现上述目标的最佳实践是什么?或者是否有一种 CoreData 方法可以递归删除所有相关对象?
感谢您的帮助。
【问题讨论】:
-
只需将关系的“删除规则”设置为“级联”即可。比较stackoverflow.com/q/20528011/1187415。
-
@MartinR 感谢您的回答。这确实工作得很好,而且比我的方法干净得多。只是为了兴趣:你可以将 NSSet.Element 转换为 NSManagedObject 吗?
-
是的,你可以...
-
@MartinR 请随时将此作为您的答案发布,以便我接受。
标签: swift core-data entity nsmanagedobject nsset