का उपयोग कर मैं एक समस्या यह है कि जब कोर डाटा में नेस्टेड प्रबंधित ऑब्जेक्ट संदर्भ का उपयोग कर उठता है करने के लिए एक सभ्य समाधान यह पता लगाने के लिए संघर्ष कर रहा हूँ। एक मॉडल लें जिसमें दो एनसाइट्स, व्यक्ति और नाम हों, जहां प्रत्येक व्यक्ति के नाम के साथ एक-से-एक संबंध होता है, और नाम का व्यक्ति संबंध वैकल्पिक नहीं होता है। इससे पहले, व्यक्ति की -awakeFromInsert
विधि में, मैं स्वचालित रूप से एक का नाम इकाई नए व्यक्ति के लिए बनाना होगा:कैसे सेटअप कोर डाटा रिश्ते को जब नेस्टेड संदर्भों
- (void)awakeFromInsert
{
[super awakeFromInsert];
NSManagedObjectContext *context = [self managedObjectContext];
self.name = [NSEntityDescription insertNewObjectForEntityForName:@"Name" inManagedObjectContext:context];
}
यह एक एकल, गैर नेस्टेड प्रबंधित वस्तु के संदर्भ में ठीक काम करता है। लेकिन अगर संदर्भ एक माता पिता के संदर्भ है, जब बच्चे संदर्भ सहेजा जाता है, एक नया व्यक्ति वस्तु माता पिता संदर्भ में बनाई गई है, और -awakeFromInsert
इस नई वस्तु पर फिर से कहा जाता है मूल व्यक्ति के गुणों और संबंधों पर कॉपी कर रहे हैं इससे पहले कि। इसलिए, एक और नाम ऑब्जेक्ट बनाया गया है, फिर मौजूदा नाम संबंधों की प्रतिलिपि बनाते समय "डिस्कनेक्ट" हो जाता है। बचत विफल हो जाती है क्योंकि फ़्लोटिंग नाम की अब-शून्य person
संबंध की विफलता विफल हो जाती है। इस समस्या को here के साथ-साथ अन्य स्थानों में वर्णित किया गया है।
अब तक, मैं इस समस्या का एक अच्छा समाधान के साथ आ नहीं कर पाए थे। Lazily गेटर विधि में संबंध बनाने वास्तव में क्योंकि गेटर आंतरिक कोर डाटा मशीनरी द्वारा कहा जाता है, जब नए व्यक्ति माता पिता संदर्भ में बनाया जाता है, एक ही समस्या का कारण बनता है।
एकमात्र चीज जिसके साथ मैं आ सकता हूं, स्वचालित रिलेशनशिप पीढ़ी से गुजरना है, और हमेशा व्यक्ति को बनाता है जो नियंत्रक वर्ग में बनाता है जो व्यक्ति बनाता है, या सुविधा विधि (उदाहरण के लिए +[Person insertNewPersonInManagedObjectContext:]
) जिसे केवल मेरे द्वारा बुलाया जाता है कोड, और हमेशा एक नया व्यक्ति वस्तु को स्पष्ट रूप से बनाने के लिए इस्तेमाल विधि है। शायद यह सबसे अच्छा समाधान है, लेकिन मैं प्रबंधित वस्तुओं को बनाने के लिए केवल एक विधि का उपयोग करने की अनुमति देने के बारे में इतना सख्त नहीं होना चाहूंगा, जब अन्य सृजन विधियों पर मेरा कोई नियंत्रण नहीं है और जिसका उपयोग मैं नहीं कर सकता आसानी से जांचें/बहिष्कृत करें, मौजूद हैं। एक बात के लिए, इसका अर्थ यह होगा कि वे प्रबंधित ऑब्जेक्ट्स बनाने के तरीके को अनुकूलित करने के लिए एकाधिक एनएसएआरएआर कंट्रोलर उप-वर्गों का अर्थ लेंगे।
क्या किसी और को इस समस्या का सामना करना पड़ा है जो एक सुरुचिपूर्ण समाधान के साथ आता है जो एक एनएसएमएनेज ऑब्जेक्ट को सृजन/सम्मिलन पर स्वचालित रूप से रिलेशनशिप ऑब्जेक्ट बनाने की अनुमति देता है?
के रिश्ते वैकल्पिक जा करने के लिए मान लेते हैं। फिर आप एक अनाथ नाम वस्तु के साथ समाप्त होंगे, साथ ही उनके संबंधित संदर्भ में दो "उचित" नाम ऑब्जेक्ट्स का अंत करेंगे। यह दिलचस्प होगा: 1. यह पता लगाएं कि "उचित" ऑब्जेक्ट आईडी समान हैं (वे बाद में होने जा रहे हैं, लेकिन अभी के लिए वे अस्थायी हैं) और 2. यदि अनाथ नाम ऑब्जेक्ट की आईडी अलग है। यदि ऐसा है, तो आप नाम पर awakeFromInsert भी लागू कर सकते हैं, जिससे बच्चे के संदर्भ में भाई की जांच करनी पड़ती है और अगर इसे कोई नहीं मिलता है तो उसे हटा दिया जाता है। इसे सहेजने से पहले संदर्भ से हटा दिया जाएगा, और आशा है कि सत्यापन से पहले ... – Toastor
हम्म मुझे लगता है कि मैं गलत हो सकता हूं - क्योंकि इस बिंदु पर अनाथ नाम बनाया जा रहा है, बच्चे का संदर्भ पहले ही सहेजा गया है, " उचित "नाम वस्तुएं * * मुझे इस पल के लिए अलग हो सकती हैं, क्योंकि एक नाम सहेजा गया है और दूसरा अभी भी अस्थायी है। फिर भी, यह जांच/कोशिश करने लायक हो सकता है ... – Toastor