Saat menghapus Objek CoreData, bagaimana cara juga menghapus semua Objek terkait di Swift5?
Saya sedang bekerja dengan CoreData
.
Masalah: Saya memiliki Pengguna Entitas CoreData dengan Lencanaone-to-many-relationship
Entitas CoreData lainnya . Sekarang saya mencoba menghapus Pengguna dan, tentunya, juga ingin menghapus semua Lencananya .
Menghapus Pengguna itu sendiri cukup mudah:
context.delete(selectedUser)
Namun saya harus terlebih dahulu menghapus semua Lencana Pengguna. Ini adalah Bagian yang rumit bagi saya:
for badge in selectedUser.badges {
context.delete(badge)
}
Saat melakukannya, Kesalahan ini terjadi: Tidak dapat mengonversi nilai jenis 'NSSet.Element' (alias 'Any') menjadi jenis argumen yang diharapkan 'NSManagedObject'
Kemungkinan Solusi saya: Saya berpikir untuk downcasting sederhana: context.delete(badge as! NSManagedObject)
. Namun saya tidak yakin apakah ini mungkin.
Pertanyaan: Apa Praktik terbaik untuk mencapai Sasaran yang saya jelaskan di atas? Atau mungkinkah ada cara CoreData untuk menghapus semua Objek terkait secara rekursif?
Terima kasih atas bantuan Anda.
Jawaban
selectedUser.badges
adalah NSSet
dari Badge
s, oleh karena itu Anda dapat mentransmisikan elemennya ke Badge
atau ke NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
Anda juga dapat mentransmisikan NSSet
ke mitra Swift-nya Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
Namun untuk menghapus semua objek terkait jika pengguna dihapus, solusi sederhananya adalah dengan menyetel "Aturan Penghapusan" untuk hubungan ke "Bertingkat".