2017-01-02 16 views
5

मैं कुछ महीनों के लिए कोडिंग से छुट्टी ले लिया और वापस आया और Xcode8/iOS10/MacOS सिएरा साथ CoreData में परिवर्तन की खोज की।सही तरीके को बदलते

मैं उद्देश्य सी में नई NSManagedObject उपवर्ग पीढ़ी के आसपास मेरे सिर प्राप्त करने की कोशिश की है लेकिन वहाँ वेब पर वहाँ बाहर बहुत कम है। मैं कुछ चीजें मैं स्पष्ट की जरूरत है इससे पहले कि मैं अपने प्रोजेक्ट butchering शुरू और पूरी तरह से लेकिन पहले चीजों को खिलवाड़ है, कुछ बातें मैं चारों ओर poking से पता चला है कि वहाँ बाहर दूसरों के लिए उपयोगी हो सकती है ...

कहाँ बातें

स्वचालित रूप से उत्पन्न फ़ाइलों DerivedData फ़ोल्डर में गहरी दफन रहते हैं। USER-> लाइब्रेरी-> डेवलपर-> एक्सकोड-> DerivedData-> ProjectName-lotOfRandomLetters-> तब बनाएं जब तक आप व्युत्पन्न स्रोत-> CoreDataGenerated नहीं पाते हैं तब तक फ़ोल्डर खोलना जारी रखें।

स्वचालित रूप से उत्पन्न फ़ाइलों, अपनी परियोजना फ़ोल्डर या नाविक में दिखाई नहीं देते हैं, हालांकि, अगर वहाँ एक Xcode में कोई त्रुटि आप के लिए स्रोत प्रदर्शित करेगा है।

हालात Xcode उत्पन्न

तीन codegen सेटिंग उपलब्ध हैं - मैनुअल/कोई नहीं, कक्षा परिभाषा, और श्रेणी/एक्सटेंशन।

एक संस्थाओं codegen जब मैनुअल/कोई भी (जो पुराने व्यवहार था) पर सेट है संपादक-> बनाना NSManagedObject उपवर्ग अपनी परियोजना के अंदर 4 फ़ाइलें उत्पन्न करता है ...

इकाई + CoreDataClass.h का उपयोग कर NSmanagedObject उपवर्ग बनाने और इकाई + CoreDataClass.m और इकाई + CoreDataProperties.h और इकाई + CoreDataProperties.m

(पिछले संस्करण Xcode 7 Entity.h, Entity.m, इकाई + CoreDataProperties.h और इकाई + CoreDataProperties.m फ़ाइलें उत्पन्न)

तो ई एनटीटी का कोडेजन क्लास डेफिनिशन पर सेट है, एक्सकोड इन 4 फाइलों को स्वचालित रूप से व्युत्पन्न डेटा फ़ोल्डर में उत्पन्न करता है - प्रोजेक्ट नहीं, इन फ़ाइलों को तब एक टिप्पणी के साथ चिह्नित किया जाता है जिससे आप उन्हें बदल नहीं सकते हैं। संस्थाओं codegen श्रेणी/एक्सटेंशन पर सेट है

Xcode 2 फ़ाइलें उत्पन्न करता है। इन फ़ाइलों को एक टिप्पणी के साथ चिह्नित किया गया है जो आपको बताएंगे कि आप उन्हें बदलने के लिए नहीं हैं। ये ... हैं

इकाई + CoreDataProperties.h और इकाई + CoreDataProperties.m

इन 2 फ़ाइल एक Entity.h फ़ाइल उम्मीद कर रहे हैं परियोजना में होना और Xcode में कोई त्रुटि दिखाई देगा यदि अनुपस्थित। यह एक बार है कि आप एक्सकोड के भीतर इन फ़ाइलों में से किसी एक के लिए स्रोत देख पाएंगे।

क्या इन फ़ाइलों

+ CoreDataProperties फाइलों में के रूप में Xcode के उन उत्पन्न पिछले संस्करण एक अतिरिक्त के अलावा उत्पन्न फ़ाइलों ही दिखाई देते हैं। उनमें इकाई/NSmanagedObject के लिए सभी गुण/गुण होते हैं और उन इकाइयों को संभालने के तरीके होते हैं जिनमें कई या कई रिश्तों के लिए एक होता है। नया जोड़ा fetchRequest subclassing NSmanageObject की नई fetchRequest विधि के लिए एक विधि है।

प्रश्न

1) कक्षा परिभाषा अब codegen आप किसी भी अतिरिक्त गुण/कार्यक्षमता एक NSManagedObject उपवर्ग में जोड़ने के लिए की जरूरत नहीं है जब के रूप में यह अपने आप आपके लिए फ़ाइलों को अद्यतन करता के लिए स्पष्ट और सबसे अच्छा विकल्प है (जब आप परियोजना को cmd-s से सहेजते हैं)?

2) + CoreDataClass साथ फ़ाइलों का नामकरण एक वर्ग पर एक वर्ग है, जो अर्थ होगा वहाँ एक वर्ग इस पर एक विस्तार होने के लिए किया जाना चाहिए के लिए सम्मेलन इस प्रकार है।

मैं सही सोचते हैं कि इकाई + CoreDateClass ज/मी फ़ाइलों वर्ष Entity.h/मी फ़ाइलों के लिए एक सीधे प्रतिस्थापन हैं में हूं? और फ़ाइल नाम के बावजूद यह वास्तव में एक श्रेणी नहीं है?

3) नई NSManagedObject उपवर्गों के लिए मैं इकाई + CoreDataClass.h बजाय Entity.h का आयात किया जाना चाहिए?

4) मुझे अपने NSManagedObject उपवर्ग फ़ाइलों के सबसे को हटाने के द्वारा अपने प्रोजेक्ट uncluttered करने के लिए, मैं सिर्फ Xcode में फ़ाइलों को हटाने और संस्थाओं कक्षा परिभाषा को codegen या सेट करूँ ... चाहते हैं

तहत जादू है जब आप #import entity.h को करने का प्रयास करते हैं तो इकाई + CoreDataClass को देखने वाला हुड या मुझे #import entity.h पर प्रत्येक संदर्भ को देखना होगा और उन्हें #import इकाई + CoreDataClass.h में बदलना होगा?

5) क्या मैं यह मानने में सही हूं कि अगर मैं एक एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास चाहता हूं जहां मैं एक संपत्ति और एक विधि जोड़ना चाहता हूं जिसे मुझे श्रेणी/एक्सटेंशन में कोडजन सेट करना चाहिए?

6) मैं श्रेणी/एक्सटेंशन मैं अपने खुद के NSmanagedObject उपवर्ग फ़ाइल बनाने के लिए चुनते हैं, तो अपने बस इकाई + CoreDataClass.h नहीं entity.h?

7) अगर इकाई + CoreDataClass.h इकाई के लिए नया स्वीकृत नामकरण प्रारूप है। फ़ाइल जेनरेट की गई श्रेणी/एक्सटेंशन फ़ाइल एक सादे इकाई के लिए क्यों दिखती है। एक इकाई के बजाय नाम फ़ाइल + CoreDataClass.h फ़ाइल ? क्या यह सिर्फ एप्पल के हिस्से पर एक असंगतता है और मुझे बस कुछ स्वीकार करना चाहिए या क्या मुझे कुछ याद आ रहा है जिसके बारे में मुझे पता होना चाहिए?

धन्यवाद।

+0

कुछ उत्तर खोजें और संबंधित डब्ल्यूडब्ल्यूडीसी वीडियो [यहां] (http://stackoverflow.com/a/39933534/1457385) के लिए एक लिंक खोजें। – shallowThought

उत्तर

2

ठीक है - कुछ लोगों ने देखा और कोई जवाब नहीं है इसलिए मैं कोशिश करूँगा और जवाब दूंगा।

1) हाँ - अगर आप एक CoreData इकाई से अतिरिक्त गुण/कार्यक्षमता जोड़ने के लिए की जरूरत नहीं है, कक्षा परिभाषा के साथ चलते हैं। यह 4 फाइलें बनाता है: इकाई + CoreDataClass.h और इकाई + CoreDataClass.m और Entity + CoreDataProperties.h और Entity + CoreDataProperties.m लेकिन आप उन्हें कभी नहीं देख पाएंगे क्योंकि वे व्युत्पन्न डेटा फ़ोल्डर के अंदर गहरे दृष्टि से छिपे हुए हैं। यदि आपको एक विशेषता नाम पर जांच करने की आवश्यकता है तो आप कोर डेटा एडिटर में देख सकते हैं क्योंकि आपको इन फ़ाइलों तक पहुंच नहीं होगी।

2) इकाई + CoreDateClass ज/मी फ़ाइलों वर्ष Entity.h/मी फ़ाइलों के लिए एक सीधे प्रतिस्थापन कर रहे हैं। किसी श्रेणी के लिए फ़ाइल नामकरण सम्मेलन का उपयोग करने के बावजूद, वे श्रेणियां नहीं हैं, ऐप्पल की नामकरण प्रणाली आपको भ्रमित न करने दें। फ़ाइल के अंदर देखो और कक्षा को एंटिटी + एंटिटी + कोरडाटा क्लास के रूप में परिभाषित नहीं किया गया है।

3) नए एनएसएमएनेज्ड ऑब्जेक्ट उप-वर्गों के लिए ('कक्षा परिभाषा' विकल्प के साथ स्वत: उत्पन्न) Entity.h की बजाय इकाई + CoreDataClass.h आयात करें। आखिरकार 'यह वह फ़ाइल है जिसे आप अंदर परिभाषित कक्षा नहीं आयात कर रहे हैं। कक्षा का उपयोग करते समय इसकी इकाई केवल इकाई नहीं है ...

4) यदि आपने अपनी परियोजना को अस्वीकार करने का निर्णय लिया है, तो अपनी एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास फाइलों को हटाकर, सिस्टम क्लासिन को 'क्लास डेफिनिशन' में स्विच करना, आपको परियोजना के माध्यम से जाना होगा और उन सभी आयात विवरणों को बदलना होगा जो उन्हें जोड़कर देखेंगे फ़ाइल नाम पर CoreDataClass। सौभाग्य से यह नहीं कि एक्सकोड के रूप में एक बड़ा सौदा उन्हें सभी त्रुटियों के रूप में ध्वजांकित कर देगा, इसलिए उन्हें ढूंढना आसान है।

5) हां - यदि आप एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास में गुण या कार्यक्षमता जोड़ना चाहते हैं तो कोडजन "श्रेणी/एक्सटेंशन" विकल्प का उपयोग करें।

6) यदि आप श्रेणी/एक्सटेंशन चुनते हैं तो आपको अपना स्वयं का NSmanagedObject सबक्लास फ़ाइल बनाना होगा, इसे Entity.h नाम दें। इसे एंटीटी + CoreDataClass.h नाम न दें क्योंकि स्वत: जेनरेटेड इकाई + CoreDataProperty.h एक Entity.h फ़ाइल आयात करने के लिए देख रहा है।

7) हां, यह ऐप्पल के हिस्से पर सिर्फ एक नामकरण असंगतता है। इसे फेंकने मत दो, जैसे उसने मुझे किया था।

और अंत में, भूल नहीं है ...

अगर आप codegen का उपयोग करने का मार्ग नीचे जाना -> श्रेणी/एक्सटेंशन, यदि आप इकाई के लिए एक अतिरिक्त संबंध जोड़ते हैं तो अपने इकाई को अद्यतन करने की आवश्यकता होगी एच फाइल। उदाहरण के लिए यदि आपने कार नामक एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास से संबंध जोड़ा है तो आपको @Class Car; को Entity.h में जोड़ना होगा।

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