के साथ बच्चे के संदर्भ का उपयोग करना मुझे NSPrivateQueueConcurrencyType के साथ स्क्रैच पैड के रूप में बाल संदर्भ का उपयोग करने में समस्या हो रही है।NSPrivateQueueConcurrency का उपयोग करना NSPrivateQueueConcurrencyType मूल संदर्भ
मेरे कोर डेटा ढेर इस तरह दिखता है:
दृश्य नियंत्रकों का उपयोग मुख्य प्रसंग। एक एपीआई से डेटा आयात करने के लिए वर्कर संदर्भ का उपयोग किया जाता है। मैं मुख्य और कार्यकर्ता संदर्भों के बीच परिवर्तनों को मर्ज करने के लिए mergeChangesFromContextDidSaveNotification का उपयोग कर रहा हूं। अगर मैं समीकरण के बाहर वर्कर चाइल्ड संदर्भ छोड़ देता हूं, तो चीजें सही तरीके से काम कर रही हैं।
हालांकि, मैं ऑब्जेक्ट्स आयात करते समय कार्यकर्ता बाल संदर्भ को स्क्रैच पैड के रूप में उपयोग करना चाहता हूं। कुछ डेटा को नेस्टेड ऑब्जेक्ट्स बनाने की आवश्यकता होती है, और यदि इमारत की प्रक्रिया में कहीं कोई त्रुटि है, तो मैं बस उस संदर्भ को फेंकना चाहता हूं। यदि निर्माण सफल होता है, तो मैं कार्यकर्ता बाल संदर्भ को सहेजने में सक्षम होने की उम्मीद करता हूं, क्या यह कार्यकर्ता संदर्भ में परिवर्तन को धक्का देता है, जो तब मुख्य संदर्भ में परिवर्तनों को सहेज और विलय कर सकता है।
हालांकि, जब मैं वर्कर चाइल्ड कॉन्टेक्स्ट में एक खोज अनुरोध बनाने के लिए वर्कर चाइल्ड कॉन्टेक्स्ट में एक फ़ेच अनुरोध निष्पादित करने का प्रयास करता हूं, भले ही यह वर्कर चाइल्ड कॉन्टेक्स्ट पर performBlock
के अंदर किया गया हो, तो मुझे एक बहु थ्रेडिंग दावा मिल रहा है।
मुझे यकीन नहीं है कि इस प्रश्न का उत्तर देने में कौन से कोड स्निपेट उपयोगी होंगे, लेकिन मेरी मुख्य चिंता यह है कि मेरा समग्र दृष्टिकोण काम नहीं करेगा। क्या किसी अन्य संदर्भ के बच्चे के रूप में निजी कतार संदर्भ होना एक बुरा विचार है?
संपादित करें:
दुर्घटना मैं हो रही हैं, जब एक कार्यकर्ता बच्चे संदर्भ एक मिल रहा है या ऑपरेशन बनाने का अनुरोध लाने पर अमल करने की कोशिश करता है। यह भविष्य में किसी भी प्रबंधित ऑब्जेक्ट का उपयोग नहीं कर रहा है, और इसे performBlockAndWait
में लपेटा गया है। मुझे जो स्पष्टीकरण मिल रहा है वह है 'एनएसआईएननल इन्फॉन्सिस्टेंसी अपवाद', कारण: 'कथन अभी भी सक्रिय है' दुर्घटना अस्थायी है, लेकिन अब तक ऐसा प्रतीत होता है कि यह तब होता है जब मैंने नियुक्त कार्यकर्ता बाल संदर्भ किया है। (यानी मेरे आरेख में कार्यकर्ता बाल संदर्भ में अपनी स्वयं के निर्माण वस्तुओं का एक बाल संदर्भ होगा)
क्रैश का कारण प्राप्त करने का अनुरोध हमेशा खोज या निर्माण ऑपरेशन के लिए होता है, इसलिए यह किसी भी ऑब्जेक्ट को अद्वितीय पहचानकर्ता के साथ लाने का प्रयास करता है आयात की जा रही वस्तुओं के पहचानकर्ता से मेल खाता संपत्ति। तो भविष्यवाणी हमेशा "identifier in ["1234", "abc", "etc" ]
जैसा कि मैंने एक टिप्पणी में उल्लेख किया है, मैं मूल रूप से एक पीएससी -> निजी संदर्भ -> मुख्य संदर्भ -> निजी श्रमिक संदर्भ सेटअप का उपयोग कर रहा था। मुझे यूआई फ्रीजिंग का अनुभव है जबकि कार्यकर्ता संदर्भ डेटा आयात करते समय लाता है और बचाता है, इसलिए मैं यूआई को खाली करने के लिए इस स्टैक पर दोबारा प्रतिक्रिया करने की कोशिश कर रहा हूं।
प्रदर्शन-ब्लॉक के अंदर आप क्या कर रहे हैं जो बहु-थ्रेडिंग दावे का कारण बन रहा है? यह गलत होने के कारण एक सुराग प्रदान करेगा। – Tim