जब एक CoreData ऑब्जेक्ट को हटाते हैं, तो Swift5 में अपनी संबंधित वस्तुओं को कैसे हटाएं?
मैं फिलहाल साथ काम कर रहा हूं CoreData
।
समस्या: मेरे पास एक CoreData इकाई उपयोगकर्ता है जो एक one-to-many-relationship
अन्य CoreData इकाई बैज के साथ है । मैं अब एक उपयोगकर्ता को हटाने की कोशिश कर रहा हूं और जाहिर है, उसके सभी बैज भी हटाना चाहेंगे ।
उपयोगकर्ता को हटाना स्वयं बहुत आगे है:
context.delete(selectedUser)
हालाँकि मुझे सबसे पहले उपयोगकर्ता के बैज को हटाना होगा। यह मेरे लिए जटिल हिस्सा है:
for badge in selectedUser.badges {
context.delete(badge)
}
ऐसा करते समय, यह त्रुटि उत्पन्न होती है: अपेक्षित तर्क प्रकार 'NSManagedObject' के प्रकार 'NSSet.Element' (उर्फ 'Any') का मान परिवर्तित नहीं किया जा सकता है
मेरा संभव समाधान: मैं सरल डाउनकास्टिंग के बारे में सोच रहा था context.delete(badge as! NSManagedObject)
:। हालांकि मुझे यकीन नहीं है कि यह संभव है।
प्रश्न: ऊपर वर्णित लक्ष्य को प्राप्त करने के लिए सबसे अच्छा अभ्यास क्या है? या शायद सभी संबंधित वस्तुओं को पुन: प्राप्त करने के लिए एक कोरडेटा तरीका है?
आपकी सहायता के लिए धन्यवाद।
जवाब
selectedUser.badges
एक है NSSet
की Badge
है, इसलिए आप के लिए उसके तत्वों डाल सकता Badge
या करने के लिए NSManagedObject
:
for badge in selectedUser.badges {
context.delete(badge as! NSManagedObject)
}
आप NSSet
इसके स्विफ्ट समकक्ष को भी डाल सकते हैं Set
:
for badge in selectedUser.badges as! Set<Badge> {
context.delete(badge)
}
लेकिन सभी संबंधित वस्तुओं को हटाने के लिए यदि कोई उपयोगकर्ता हटा दिया जाता है, तो सरल समाधान "कैस्केड" के संबंध के लिए "हटाए जाने का नियम" निर्धारित करना है।