2013-12-11 8 views
6

में कैस्केड के साथ रिलेशनशिप ऑब्जेक्ट्स को हटाना मैं कोर डेटा के साथ कुछ सरल विलोपन करना चाहता हूं लेकिन कृपया इस पर थोड़ा सा सलाह चाहिए।कोर डेटा

मेरे पास लेनदेन, नाम, घटना और दिनांक इकाइयों वाला एक मॉडल है। लेनदेन में अन्य सभी संस्थाओं का एक लिंक है।

ऐप में, जब कोई उपयोगकर्ता टेक्स्ट फ़ील्ड में जानकारी जोड़ता है, तो उसे 4 टैब तालिका दृश्य नियंत्रक में सहेजा जाता है।

पहला टैब लेनदेन इकाई पर fetchRequest के साथ NSFetchedResultController का उपयोग कर रहा है। दूसरा टैब नाम इकाई का उपयोग कर रहा है, तीसरा घटना का उपयोग कर रहा है और चौथा दिनांक इकाई का उपयोग कर रहा है।

यदि मैं लेनदेन टैब से एक प्रविष्टि हटा देता हूं, तो यह केवल उस लेनदेन को हटा देता है जो समझ में आता है।

मैं जो चाहता हूं वह नाम टैब से किसी व्यक्ति को हटाने या ईवेंट टैब से एक ईवेंट को हटाने में सक्षम होना चाहिए और ऐप के मॉडल के माध्यम से कैस्केडिंग करना है। तो यदि बॉब के पास कई लेन-देन हैं, तो उसे लेनदेन टैब हटाकर उस लेनदेन को हटा दिया जाएगा।

यदि मैं नाम टैब से बीओबी हटा देता हूं, तो उसे हर घटना और लेनदेन के साथ भाग लेने के लिए उसे हर घटना से हटा देना चाहिए।

वही घटनाओं और तिथियों के लिए लागू होता है।

संपादित करें: अद्यतन डाटा मॉडल

शामिल करने के लिए नोट: वर्ष इकाई प्रयोगात्मक और वर्तमान में enter image description here मैं कैसे कुछ इस तरह करने के बारे में जाना होगा नहीं इस्तेमाल किया जा रहा है?

धन्यवाद

+0

यदि आप अपने कोर डेटा मॉडल का स्क्रीनशॉट पोस्ट करते हैं तो इससे मदद मिलेगी। –

+0

धन्यवाद मार्टिन - मॉडल – amitsbajaj

उत्तर

8

आप "कास्केड", तो एक व्यक्ति को हटाने को स्वचालित रूप से सभी संबंधित लेन-देन को नष्ट करेगा करने के लिए "लेन-देन" Transaction को Person से रिश्ते के लिए "विलोपन नियम" सेट करते हैं।

+0

मॉडल को शामिल करने के लिए अद्यतन प्रश्न मुझे लगता है कि वह जानता है कि ... – Mundi

+1

इस कॉन्फ़िगरेशन के साथ व्यक्ति को हटाए बिना सभी व्यक्तियों के लेनदेन को हटाने के बारे में क्या?लेनदेन को 'शून्य' पर सेट करना या इसे खाली करना पर्याप्त होगा? – Rivera

+1

@ रिवर: नहीं। "हटाना नियम" केवल तभी लागू होते हैं जब कोई वस्तु * हटाई जाती है *। –

0

सबसे पहले, मैं इकाइयों में सारणित सारणियों के ज्ञान को नहीं देख सकता। शायद आप मुझे प्रबुद्ध कर सकते हैं। मेरे दिमाग में, तारीख लेनदेन से संबंधित है। तिथि टैब पर आपको अभी भी लेन-देन करना होगा लेकिन उन्हें समूहबद्ध और अलग-अलग क्रमबद्ध करना होगा।

मुझे लगता है कि आप जानते हैं कि कैसे अपने व्यक्ति-से-लेन-देन संबंधों को कैस्केड करना है। यह किसी व्यक्ति से जुड़े सभी लेनदेन को हटा देगा। यह घटना पर लागू होता है।

दूसरी दिशा में कैस्केडिंग, हालांकि अधिक समस्याग्रस्त है। आपको किसी भी तरह से जांच करनी है कि क्या यह पिछले कई रिश्तों के सदस्य हैं और केवल अगर इसे हटा दें तो इसे हटा दें। ऐसा करने का एक तरीका सेटर्स को ओवरराइड करना है। आपके जेनरेट किए गए NSManagedObject उप-वर्गों में आपको ऑटो जेनरेटेड सेटर्स मिलेंगे, जिनमें सेट से ऑब्जेक्ट्स जोड़ने या निकालने के लिए शामिल हैं (यानी, कई रिश्ते)।

-(void)removeTransactionsObject:(Transaction *)value { 
    [super removeTransactionsObject:value]; 
    if (!self.transactions.count) { 
     [self.managedObjectContext deleteObject:self]; 
    } 
}