2012-07-10 14 views
5

डिफ़ॉल्ट रूप से डेटा मॉडल से NSManagedObject सबक्लास फ़ाइल बनाते समय, कोर डेटा स्ट्रिंग प्रकार कॉलम के लिए NSString (nonatomic, retain) प्रकार के गुण बनाता है। मुझे प्रदर्शन विचार के कारण किया जा सकता है, हालांकि, मैं डेटा मैपर पैटर्न को कार्यान्वित कर रहा हूं जहां मूल डेटा एनएसएमएनेज ऑब्जेक्ट उप-वर्ग मॉडल कक्षाओं से अलग होते हैं। तो जब मॉडल कक्षाओं को कोर डेटा NSManagedObject उपclass में कनवर्ट करते हैं, तो केवल एक पॉइंटर असाइन करें, न कि प्रतिलिपि। आर्किटेक्चर बिंदु से, यह कोर डेटा एक्सेस और मॉडल कक्षाओं के बीच तर्क तर्क को तोड़ देता है, इसलिए मुझे बनाए रखने के बजाय कॉपी का उपयोग करने की आवश्यकता है।NSManagedObject NSString गुणों को "बनाए रखने" के बजाय "प्रतिलिपि" के साथ कैसे बनाया जाए?

क्या यह करने का एकमात्र तरीका मैन्युअल रूप से NSManagedObject subclasses में गुणों को बदलने के लिए है?

+0

बस अगर आपको इस बारे में पता नहीं है - सामान्य (गैर-परिवर्तनीय) 'एनएसएसटींग' की 'प्रतिलिपि' विधि एक ही उदाहरण देता है, इसलिए अपनी प्रतिलिपि संपत्ति को मुक्त न करें, वास्तव में कुछ भी कॉपी नहीं करता है जब आप इसका परीक्षण करते हैं। – Monolo

+0

हां, मुझे इसके बारे में पता है, पहले ही परीक्षण किया गया है। "कॉपी" कॉपी केवल म्यूटेबल प्रकार ऑब्जेक्ट्स। इसके अलावा, ध्यान दें, "प्रतिलिपि" संपत्ति भी प्रतिलिपि संदेशों को एनएसएआरएआरई तत्वों में भेजती है, इसलिए सरणी के अंदर मौजूद होने पर उत्परिवर्तनीय तारों की प्रतिलिपि बनाई जाएगी। – Centurion

+0

कृपया, उत्तर के नीचे मेरी टिप्पणी देखें। आज, व्यावहारिक उपयोग "प्रतिलिपि" गुणों को समझने की कोशिश की। मैं समझता हूं कि वे कैसे काम करते हैं, बस एनएसएमयूटेबलस्ट्रिंग का उपयोग करने की आवश्यकता नहीं थी, इसलिए मेरे अनुभव में प्रतिलिपि अनावश्यक है और केवल भविष्य की सुरक्षा के लिए। – Centurion

उत्तर

4

ऐसा करने का एकमात्र तरीका एनएसएमएनेज्ड ऑब्जेक्ट उप-वर्ग में संपत्ति की घोषणा को बदलना है। शुक्र है, कोर डेटा फिर बाकी को स्वचालित रूप से संभालता है।

+0

यह संभव है कि कुछ प्रक्रियाएं विकास प्रक्रिया के दौरान कोर डेटा मॉडल स्कीमा में बदल जाएंगी, इसलिए एनएसएएनएजेडऑब्जेक्ट्स को पुन: उत्पन्न करने से संपादित गुणों को "बनाए रखने" के लिए ओवरराइट किया जाएगा। तो, यह एक छोटी सी असुविधा है। – Centurion

+0

इसके अलावा, "प्रतिलिपि" गुणों पर मेरे विचार साझा करना चाहते हैं। गुण एनएसएमयूटेबल स्ट्रिंग संपत्ति के मूल्य को बाहर से बदलने से रोकते हैं। कोई परिवर्तनीय NSNumber और NSDate नहीं है, इसलिए "प्रतिलिपि" केवल तारों को प्रभावित करती है। हालांकि, आईओएस ऐप विकास के अपने दूसरे वर्ष के मुताबिक, मुझे कभी भी एनएसएमयूटेबलस्ट्रिंग का उपयोग करने की ज़रूरत नहीं है, इसलिए "कॉपी" केस बहुत दुर्लभ है IMHO :) ऐप्पल अपने उदाहरणों में एनएसएसटींग गुणों पर प्रतिलिपि का उपयोग करने के लिए प्रोत्साहित करता है लेकिन "बनाए रखने" का उपयोग करता है सरणी, शब्दकोश और सेट, हालांकि वही ओवरराइट केस मौजूद है (प्रश्न के नीचे मेरी पहली टिप्पणी देखें)। एक नियम की कमी की तरह ... – Centurion

+1

@centurion mogenerator कोशिश करें। यह आपके कोड को जेनरेट क्लास और उसके उप-वर्ग में अलग करता है; आप बिना ओवरराइट किए गए परिवर्तनों के उप-वर्ग को संपादित कर सकते हैं। –

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