जब एक CoreData ऑब्जेक्ट को हटाते हैं, तो Swift5 में अपनी संबंधित वस्तुओं को कैसे हटाएं?

Nov 28 2020

मैं फिलहाल साथ काम कर रहा हूं 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):। हालांकि मुझे यकीन नहीं है कि यह संभव है।

प्रश्न: ऊपर वर्णित लक्ष्य को प्राप्त करने के लिए सबसे अच्छा अभ्यास क्या है? या शायद सभी संबंधित वस्तुओं को पुन: प्राप्त करने के लिए एक कोरडेटा तरीका है?

आपकी सहायता के लिए धन्यवाद।

जवाब

1 MartinR Nov 28 2020 at 18:20

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)
}

लेकिन सभी संबंधित वस्तुओं को हटाने के लिए यदि कोई उपयोगकर्ता हटा दिया जाता है, तो सरल समाधान "कैस्केड" के संबंध के लिए "हटाए जाने का नियम" निर्धारित करना है।