2010-09-13 11 views
5

मेरे पास कोर डेटा ग्राफ़ में 1 से अधिक रिश्ते हैं, और मैं कोरडाटा जेनरेटेड एक्सेसर्स विधि और रिश्ते को बदलने के लिए एक सरल असाइनमेंट का उपयोग करने के बीच अंतर को समझने की कोशिश कर रहा हूं। उदाहरण के लिए, Core Data Programming Guide में एक विभाग और कर्मचारी उदाहरण है। कि उदाहरण में वे CoreDataGeneratedAccessors किराए पर और आग कर्मचारियों का उपयोग करें:कोर-डेटा कोरडाटा जेनरेटेड एक्सेसर्स बनाम सरल असाइनमेंट

[aDepartment addEmployeesObject:newEmployee]; 
[aDepartment removeEmployeesObject:firedEmployee]; 

वे एक व्युत्क्रम संबंध को परिभाषित नहीं है, लेकिन कहते हैं कि "विभाग" व्युत्क्रम संबंध के लिए "कर्मचारियों" है। तो क्या निम्नलिखित एक ही चीज़ को पूरा करना चाहिए?

newEmployee.department = aDepartment 
firedEmployee.department = nil; 

कोर डाटा प्रोग्रामिंग गाइड के Manipulating Relationships and Object Graph Integrity खंड के अनुसार, बाद में उदाहरण स्वचालित रूप से सभी रिश्तों ग्राफ स्थिरता बनाए रखने के लिए ठीक करना चाहिए। यदि ऐसा है, तो क्या एक व्यस्त संबंध मौजूद होने पर CoreDataGeneratedAccessors का उपयोग करने का कोई कारण है? CoreDataGeneratedAccessors का उपयोग करते हुए विपरीत रिश्तों पर ग्राफ स्थिरता बनाए रखते हैं?

उत्तर

2

वे एक व्युत्क्रम संबंधों को परिभाषित नहीं है, लेकिन कहते हैं कि "विभाग" "कर्मचारियों" को व्युत्क्रम संबंध है। निम्नलिखित एक ही चीज़ को पूरा करना चाहिए?

दोनों परिचालनों का एक ही परिणाम होता है इससे कोई फर्क नहीं पड़ता कि आप किस रिश्ते (विपरीत के साथ) को संशोधित करते हैं।

यदि ऐसा है, तो क्या एक विपरीत संबंध मौजूद होने पर CoreDataGeneratedAccessors का उपयोग करने का कोई कारण है? CoreDataGeneratedAccessors का उपयोग करते हुए विपरीत रिश्तों पर ग्राफ स्थिरता बनाए रखते हैं?

संगति दोनों तरीकों से कोई समस्या नहीं है। प्रदर्शन कारणों से अनुचित तरीकों के साथ बड़े संबंधों को संशोधित करना बहुत महत्वपूर्ण है।

समाधान 1

for (Employee* employee in aDepartment.employees) 
{ 
    employee.department = nil 
} 

(एक विभाग के सभी कर्मचारियों फायरिंग) प्रत्येक ऑपरेशन जबकि दूसरे के बाद समाधान 2

aDepartment.employees = nil; 

पहला समाधान एक (टेबल) का कोई अपडेट प्रारंभ होगा दृश्य परिणामस्वरूप सभी विचारों का बिल्कुल एक अपडेट होगा। यदि आप बड़ी मात्रा में ऑब्जेक्ट्स को संभालते हैं तो यह एक बड़ा अंतर हो सकता है।

यदि आपको गहराई से जानकारी की आवश्यकता है, तो मुझे लगता है कि इसी तरह के विषयों पर पहले से ही चर्चा की जा चुकी है।

+0

मार्टिन- उत्तर के लिए धन्यवाद। मेरे पास ऐसी स्थिति है जहां मैं एक बार [एक डिपार्टमेंट एडेमेंट्स ऑब्जेक्ट: नया कर्मचारी] का उपयोग कर सकता हूं, लेकिन बाद में ऐप के भीतर कॉल (भले ही यह किसी अन्य नए कर्मचारी पर है) अपडेट नहीं होता है। हालांकि, इसे newEmployee.department = aDepartment के साथ बदलकर हमेशा काम करता है। दो कॉलों के व्यवहार असंगत प्रतीत होते हैं, इसलिए मुझे परेशान है कि वे एक ही काम करना चाहते हैं। विचार? – chris

+0

@chris - ऐसा लगता है कि आपके पास विभाग इकाई और कर्मचारी इकाई के बीच एक व्यस्त संबंध नहीं है। – TechZen

+0

मैंने कुछ विशेष परिस्थितियों में केवल ऐसे व्यवहार का अनुभव किया जब कुछ मूल डेटा परिवर्तन प्रसंस्करण और पर्यवेक्षक कोड संबंधों को संशोधित करने में अवलोकनों को ट्रिगर किया गया।(यह मेरे कोड का एक बग था) –

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