Ao excluir um objeto CoreData, como excluir também todos os seus objetos relacionados no Swift5?
Atualmente estou trabalhando com CoreData
.
Problema: Eu tenho um CoreData Entidade usuário com um one-to-many-relationship
a outro CoreData Entidade Badges . Agora estou tentando excluir um usuário e, obviamente, também gostaria de excluir todos os seus emblemas .
Excluir o próprio usuário é bastante simples:
context.delete(selectedUser)
No entanto, primeiro tenho que excluir todos os crachás do usuário. Esta é a parte complicada para mim:
for badge in selectedUser.badges {
context.delete(badge)
}
Ao fazer isso, ocorre este erro: Não é possível converter o valor do tipo 'NSSet.Element' (também conhecido como 'Qualquer') para o tipo de argumento esperado 'NSManagedObject'
Minha Solução possível: Eu estava pensando em simples downcasting: context.delete(badge as! NSManagedObject)
. No entanto, não tenho certeza se isso é possível.
Pergunta: Qual é a melhor prática para atingir a meta que descrevi acima? Ou existe talvez uma maneira CoreData de excluir recursivamente todos os objetos relacionados?
Obrigado pela ajuda.
Respostas
selectedUser.badges
é um NSSet
de Badge
s, portanto, você pode lançar seus elementos para Badge
ou para NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
Você também pode lançar o NSSet
para sua contraparte Swift Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
Mas para excluir todos os objetos relacionados se um usuário for excluído, a solução simples é definir a “Regra de exclusão” para o relacionamento como “Cascata”.