पर धक्का दिया जाता है (मुझे उम्मीद है कि यह एक बेवकूफ सवाल होगा, लेकिन इस समस्या के साथ कई घंटों तक कुश्ती के बाद मुझे कुछ अंतर्दृष्टि चाहिए।किसी बच्चे द्वारा किए गए परिवर्तन के दौरान इकाई का डुप्लिकेशंस प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट को अपने माता-पिता
मेरा आईओएस 5.1 ऐप ने नेस्टेड एमओसी का उपयोग किया है, जिसमें निजी क्यूई कोंकुरेंसी बच्चे एमओसी है, इसे एमओसी-चाइल्ड कहते हैं, जिसका माता-पिता मुख्य क्यूई कोंकुरेंसी एमओसी है, इसे एमओसी-पैरेंट कहते हैं। एमओसी-पैरेंट एक टेबल व्यू का समर्थन करता है जो इसकी इकाइयों को प्रदर्शित करता है।
एमओसी-चाइल्ड का उपयोग एक पार्सर द्वारा किया जाता है, जो गैर-मुख्य धागे पर असीमित रूप से चलता है, जो कि एक इकाई कनेक्शन से पार्स किए गए एक्सएमएल इकाई-विवरणों के अनुरूप नई इकाइयां बनाता है, और फिर नई इकाइयों को एमओसी- अभिभावक, एमओसी-चाइल्ड पर सहेजने के माध्यम से, जो उन्हें तालिका दृश्य में प्रदर्शित करता है। यह महान काम करता है:
1) Parser creates entity in MOC-Child
2) Parser saves MOC-Child
3) New entity is added to MOC-Parent
4) New entity is displayed in MOC-Parent's table view
हालांकि, इस फ़ीड में किसी भी इकाई का वर्णन समय के साथ बदल सकते हैं, ताकि इकाई यह जरूरतों का वर्णन करता है अनुप्रयोग में संशोधित किया जा करने के लिए और तालिका दृश्य में अपने सेल अपडेट किया गया। तो फ़ीड में प्रत्येक इकाई विवरण के लिए, पार्सर एमओसी-चाइल्ड में इकाई (यदि कोई हो) लाने की कोशिश करता है जिसमें वर्णित इकाई के समान आईडी है, और यदि कोई है तो मौजूदा इकाई के मानों को वर्णन मानों के साथ तुलना करता है देखें कि कुछ बदल गया है या नहीं। जब पार्सर इस तरीके से पता लगाता है कि एक इकाई को संशोधित किया गया है, तो यह एमओसी-चाइल्ड में मौजूदा इकाई के मानों को विवरण में नए मानों के साथ अद्यतन करता है, और फिर एमओसी-चाइल्ड में परिवर्तन को धक्का देने के लिए एमओसी-चाइल्ड बचाता है।
यह वह जगह है जहां चीजें गलत होती हैं। मैंने सोचा था कि एमओसी-चाइल्ड में एक प्राप्त इकाई में किए गए परिवर्तन, जब इसे सहेजकर माता-पिता को धक्का दिया जाता है, तो एमओसी-अभिभावक में "समान" इकाई में बस "दिखाई दें"। हालांकि, मैं जो देख रहा हूं वह यह है कि एमओसी-चाइल्ड की बदलती इकाई को एमओसी-पैरेंट, में जोड़ा गया है, हालांकि यह पूरी तरह से अलग और नई इकाई थी; परिणाम के साथ एमओसी-जनक, और इस तरह तालिका देखें कि यह ड्राइव, हर संशोधित इकाई के लिए दो संस्थाओं के साथ समाप्त होता है:
1) Parser modifies existing entity in MOC-Child
2) Parser saves MOC-Child
3) Modified entity is _added to_ MOC-Parent
4) Entity is displayed _twice_ in MOC-Parent's table view
क्या देता है? एमओसी-पैरेंट में मौजूदा इकाई के मूल्यों को बदलने के लिए मुझे क्या करने की ज़रूरत है, अगर मैं इसे एमओसी-चाइल्ड के भीतर नहीं कर सकता? और अगर मुझे एमओसी-चाइल्ड के भीतर ऐसा करने में सक्षम होना चाहिए, तो एमओसी-चाइल्ड में बदलाव करने के लिए एमओसी-चाइल्ड को सहेजने के अलावा मुझे कुछ और करने की ज़रूरत है, बिना इकाई को दूसरी बार जोड़ने के?
किसी भी मदद या अंतर्दृष्टि के लिए अग्रिम धन्यवाद!
कार्ल
पी.एस. कुछ स्पष्टीकरण। जब मैं कहता हूँ कि बदली हुई इकाई एमओसी-जनक को जोड़ा जाता है, मेरा मतलब है कि NSFetchedResultsController कि एमओसी-जनक की निगरानी कर रहा है एक NSFetchedResultsChangeInsert परिवर्तन प्रकार जारी करता है ( एक NSFetchedResultsChangeUpdate परिवर्तन प्रकार का नहीं) बदली हुई इकाई के लिए, भले ही " वही "इकाई एमओसी-अभिभावक में पहले से मौजूद है।
इसके अलावा, जब मैं "समान" इकाई कहता हूं, तो मेरा मतलब एमओसी-माता-पिता में एक इकाई है जिसमें एमओसी-बच्चे में परिवर्तित इकाई के रूप में एक ही वर्णन-आपूर्ति आईडी (इस मामले में एक एनएसएसटींग) है अनिवार्य रूप से एक ही ऑब्जेक्ट आईडी, वास्तव में स्पष्ट रूप से एक अलग वस्तु आईडी है)।
मुझे एक ही समस्या है। मेरे पास एक UIManagedDocument से नेस्टेड संदर्भों से जुड़ा एक NSFetchedResultsController है। मैं सिर्फ पृष्ठभूमि में अभिभावक पर एक सर्वर से लोड कर रहा हूं और फिर बच्चे को अग्रभूमि में दिखा रहा हूं। लेकिन यह ठीक से काम नहीं कर रहा है इससे कोई फर्क नहीं पड़ता। अगर मैं ऐप बंद करता हूं और फिर से खोलता हूं, तो यह पूरी तरह से स्मृति से लोड होता है। अजीब। –