2010-01-23 10 views
15

मेरे पास कोर डेटा मॉडल है जिसमें तीन इकाइयां हैं: ए, बी, और सी ए के साथ बी के साथ एक से अधिक संबंध हैं, और बी के साथ कई से अधिक रिश्ते हैं। ए के लिए डिलीट नियम -> बी "कैस्केड" है, और बी -> ए "नो एक्शन" है। बी -> सी के लिए डिलीट नियम "नो एक्शन" है, और सी -> बी "अस्वीकार" है।कोर डेटा में प्रबंधित ऑब्जेक्ट्स को सही ढंग से कैस्केड कैसे करें?

मुझे ए इकाई पर एक डिलीट करने में परेशानी हो रही है। (नियम "कास्केड" की वजह से हटाना) किसी भी बी के एक साथ जुड़े करने के लिए (deleteObject: का उपयोग कर)

  1. मैं एक का एक उदाहरण हटाना
  2. हटाने propagates
  3. : क्या मैं क्या करना चाहते पीछा कर रहा है जब एक एक dele है: सभी बी के एक साथ जुड़े नष्ट हो जाती हैं
  4. किसी भी सी जिसका जुड़े बी के नष्ट कर दिया गया से संबंधित रिश्ते, भी

कि एक छोटे से भ्रमित हो सकता है, इसलिए मुझे व्याख्या करते निकाल दिए जाते हैं टेड, सभी संबंधित बी को हटा दें। और किसी भी सी जो उन बी को संदर्भित करता है उन्हें अब संदर्भित नहीं करना चाहिए।

मेरे परीक्षण में, मुझे "कैस्केड" को मेरे लिए नियम का काम नहीं दिख रहा है। जब मैं ए को हटा देता हूं, तो मैं तुरंत बाद में processPendingChanges का आह्वान करता हूं (केवल यह सुनिश्चित करने के लिए कि हटाना हो गया है)। फिर मैं ए और बी की संख्या की तुलना करता हूं जो हटाने से पहले NSManagedObjectContext में थे, और उसके बाद। ए का उदाहरण ठीक से हटा दिया गया है, (कुल ए की संख्या अब हटाने से पहले एक कम है)। हालांकि, बी की संख्या वही बना है। तो, ऐसा लगता है कि "कैस्केड" हटाने के नियम को सम्मानित नहीं किया जा रहा है।

मुझे पता है कि मैं मैन्युअल रूप से ए -> बी रिश्ते से गुजर सकता हूं, और मैन्युअल रूप से प्रत्येक बी को हटा सकता हूं। हालांकि, ऐसा लगता है कि कोर डेटा कुछ मुफ्त में प्रदान करता है, इसलिए मैं कोर डेटा तक ऐसा नहीं करना चाहता अपर्याप्त है "कैस्केड" हटाने के नियमों के उपयोग से संबंधित कोई भी जानकारी स्वागत है।

+0

क्यों नहीं करते आप हटाना चाहते हैं सी का संदर्भ बी बी हटाए गए ए से जुड़ा है? – Eimantas

उत्तर

16

मैं निश्चित रूप से कोई कोर डाटा विशेषज्ञ हूँ, लेकिन पढ़ने documentation on the various delete rule options, मुझे लगता है कि आप बी चाहते हैं - मंसूख़, बजाय कोई कार्रवाई होने के लिए> सी संबंध। शायद बीएस दूर नहीं जा रहे हैं क्योंकि सीएस अभी भी उनके संदर्भ में हैं?

+0

आपने मुझे सही दिशा में इंगित करने में मदद की। Nullify संदर्भों को सही ढंग से हटा देता है। मुझे अभी भी हटाने के बाद कुछ समस्याएं हैं, लेकिन मेरा मानना ​​है कि यह मेरे तर्क/डेटा मॉडल में कुछ है। –

+0

हैलो, लिंक टूटा हुआ है। –

+0

कोर डेटा प्रोग्रामिंग गाइड ने हाल ही में कुछ महत्वपूर्ण महत्वपूर्ण बदलाव किए हैं (और बहुत सारी सामग्री भी खो दी है)। लिंक अपडेट किया गया। –

1

किसी भी सी जिसका जुड़े बी के नष्ट कर दिया गया से संबंधित रिश्तों के आधार पर, भी निकाल दिए जाते हैं पता चलता है कि बी-सी भी कास्केड होना चाहिए।

आगे, यदि बी हटा दिया गया है, तो सी को भी हटा दिया जाना चाहिए। फिर कैस्केड।

  • मंसूख़ अक्सर एक व्युत्क्रम विलोपन नियम *

यानी के रूप में प्रयोग किया जाता है। ए के लिए बीएस संबंध शून्य है। बी से संबंध रिलायंस है। ऐसा है कि जब सी हटा दिया जाता है, बी हटाया नहीं जाता है। और जब बी हटा दिया जाता है; ए हटाया नहीं गया है।

इस विजेता ड्राइंग के रूप में।

एक --- >> बी कास्केड < ---- मंसूख़

बी --- >> सी कास्केड < ---- रद्द

संबंधित मुद्दे