निम्नलिखित सरल इकाई मॉडल पर विचार करें: एंटिटी ए के पास बी नामक एंटिटी बी के साथ एक से एक संबंध है। एंटिटी बी में नामक एक रिश्तेदार संबंध है। न तो रिश्ते वैकल्पिक है।कोर डेटा iCloud सिंक्रनाइज़ेशन
A B
b < ----- > a
मान लें हम दो उपकरणों (1) और (2) कि पूरी तरह से सिंक किए गए शुरू की है। प्रत्येक में कक्षा ए का एक वस्तु है, और कक्षा बी का एक वस्तु है, और वे एक-दूसरे से जुड़े हुए हैं। डिवाइस 1 पर, हमारे पास ऑब्जेक्ट ए 1 और बी 1 है, और डिवाइस बी पर हमारे पास समान लॉजिकल ऑब्जेक्ट्स A1 और B1 हैं।
अब मान लेते हैं कि simulateous परिवर्तन प्रत्येक डिवाइस पर बने होते हैं:
डिवाइस 1 पर, हम, बी 1 हटाना बी 2 डालें, और बी 2 के साथ संबद्ध A1। फिर परिवर्तनों को सहेजें।
डिवाइस 2 पर, हम बी 3 के साथ बी 1, बी 3 डालने, और सहयोगी A1 को हटा दें। फिर परिवर्तनों को बचाओ।
डिवाइस 1 अब डिवाइस 2. बी 3 सम्मिलित किया जाएगा से हस्तांतरण लॉग आयात करने के लिए प्रयास करता है, और A1 बी 3 के साथ संबद्ध किया जाएगा। अब तक इतना अच्छा है, लेकिन बी 2 अब रिश्ते शून्य के बराबर है। एक संबंध गैर-वैकल्पिक है, इसलिए एक सत्यापन त्रुटि उत्पन्न होती है।
डिवाइस 2 पर कुछ समान होगा, क्योंकि दो बी ऑब्जेक्ट्स हैं, और केवल एक ऑब्जेक्ट से जुड़ा हुआ है। इस प्रकार हमेशा एक सत्यापन त्रुटि होनी चाहिए, क्योंकि बी वस्तुओं में से एक को संबंध शून्य पर सेट होना चाहिए।
इससे भी बदतर यह भविष्य के किसी भी परिवर्तन हमेशा के आसपास फांसी एक गुमराह बी वस्तु छोड़ देंगे, और इसलिए सत्यापन असफल हो जायेगी। असल में, उपयोगकर्ता रिश्ते को रीसेट करके समस्या को ठीक नहीं कर सकता है। यह स्थायी रूप से टूटा हुआ है।
सवाल, कैसे आप इस प्रकार का सत्यापन त्रुटि का समाधान कर सकते है? यह सब NSPersistentStoreDidImportUbiquitousContentChangesNotification
अधिसूचना ट्रिगर होने से पहले होता है। यह आपकी ऐप्लिकेशन मुख्य NSManagedObjectContext
में एक प्रमाणीकरण त्रुटि नहीं है, यह एक प्रमाणीकरण त्रुटि है कि लगातार दुकान में हस्तांतरण लॉग की प्रारंभिक आयात के दौरान होता है।
ही एकमात्र विकल्प मैं के बारे में सोच सकते हैं शायद, या, क्योंकि इन होने लगते हैं एक कस्टम सेटर (setA:
) में अवैध बी वस्तु को हटाने का प्रयास करने के लिए बी वर्ग पर ही एक KVC सत्यापन विधि (validateA:error:
) में है लेनदेन लॉग आयात के दौरान ट्रिगर। लेकिन मुझे यकीन नहीं है कि इन जैसे साइड इफेक्ट्स की अनुमति है, और जब मैं इसे आज़माता हूं, तो ऐसा लगता है कि उस प्रभाव में ग़लत लॉग संदेश हैं।
किसी को भी पता है कि सही तरीके से क्या संभाल करने है? पर एप्पल के डेवलपर फ़ोरम इस सूत्र बाहर
धन्यवाद, यह बहुत उपयोगी है। देव फोरम पोस्ट यह इंगित करता है कि यह कई रिश्तों के लिए केवल एक समस्या है, लेकिन मुझे नहीं लगता कि यह मामला है। यह किसी भी परिस्थिति में उभर जाएगा जहां एक आवश्यक संबंध एक साथ संशोधित किया जाता है। किसी भी मामले में, कम से कम मुझे पता है कि यह ढांचे में एक बग है और इसके आसपास काम करने की कोशिश कर सकते हैं। –
क्या यह समस्या अभी भी 6.x और 10.8.x में होती है? –
दुर्भाग्य से, हाँ, यह अभी भी आईओएस 6.1 में एक समस्या के रूप में मौजूद है। – thevoid