CoreDataオブジェクトを削除する場合、Swift5で関連するすべてのオブジェクトも削除するにはどうすればよいですか?
Nov 28 2020
私は現在と協力していCoreData
ます。
問題:別のCoreDataエンティティバッジを持つCoreDataエンティティユーザーがいます。現在、ユーザーを削除しようとしていますが、明らかに、彼のバッジもすべて削除したいと思います。one-to-many-relationship
ユーザー自体の削除は非常に簡単です。
context.delete(selectedUser)
ただし、最初にすべてのユーザーバッジを削除する必要があります。これは私にとって複雑な部分です:
for badge in selectedUser.badges {
context.delete(badge)
}
これを行うと、次のエラーが発生します。タイプ 'NSSet.Element'(別名 'Any')の値を予期される引数タイプ 'NSManagedObject'に変換できません
私の考えられる解決策:私は単純なダウンキャストを考えていました:context.delete(badge as! NSManagedObject)
。しかし、これが可能かどうかはわかりません。
質問:上記の目標を達成するためのベストプラクティスは何ですか?または、関連するすべてのオブジェクトを再帰的に削除するCoreDataの方法はありますか?
ご協力いただきありがとうございます。
回答
1 MartinR Nov 28 2020 at 18:20
selectedUser.badges
Sは、したがって、あなたがその要素をキャストすることができたりします。NSSet
Badge
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)
}
ただし、ユーザーが削除された場合に関連するすべてのオブジェクトを削除するには、関係の「削除ルール」を「カスケード」に設定するのが簡単な解決策です。