2009-08-03 14 views
6

में इकाई में विशेषता जोड़ना मैंने डेटा मॉडल में सभी इकाइयों/विशेषताओं/रिश्तों को मैप करने के बाद अपने सभी प्रबंधित ऑब्जेक्ट्स बनाए हैं। अब मुझे अतिरिक्त विशेषताओं/रिश्तों को जोड़ने की आवश्यकता की समस्या है, मैंने सोचा नहीं है जब मैंने पहली बार अपनी इकाइयों/कक्षाओं में से एक बनाया था। क्या मेरे मौजूदा मॉडलों को पोंछने और नए xcdatamodel के आधार पर उन्हें फिर से बनाने के लिए कोर डेटा के साथ मेरे मौजूदा एनएसएएनएजेडऑब्जेक्ट क्लास को संशोधित करने का कोई तरीका है?कोर डेटा

xcdatamodel में विशेषता जोड़ने से अंतर्निहित स्टोरेज तंत्र भी अपडेट हो जाएगा? कहें कि क्या मैं अपने सतत स्टोरेज के रूप में SQLite3 का उपयोग कर रहा हूं, क्या यह तदनुसार कॉलम जोड़ देगा?

उत्तर

8

यदि आपका मतलब है "क्या मैं अपना xcdatamodel बदल सकता हूं और एनएसएमएनेज्ड ऑब्जेक्ट व्युत्पन्न कक्षाओं के लिए जेनरेट कोड से अपने मौजूदा कोड में परिवर्तनों को विलय कर सकता हूं," हाँ, यह आसान है। आप बस उन मॉडलों के लिए कोड जेनरेट करते हैं जो बदल गए हैं, फिर उन विशेष व्युत्पन्न कक्षाओं में बदलावों को मर्ज करें। चूंकि परिवर्तनों की तरह लगता है कि वे केवल अतिरिक्त विशेषताओं और रिश्ते हैं, यह छोटा होना चाहिए - असल में, यदि आप अपने परिवर्तन वास्तव में प्रकृति में जोड़ते हैं तो आप संभवत: अर्ध-स्वचालित रूप से diff और पैच का उपयोग कर सकते हैं।

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

इससे पहले कि आप एक स्कीमा परिवर्तन करने की शुरुआत करने का निर्णय लें, आपको हमेशा डेटा डेटा में migrations and versioning कैसे करना है - यदि आपके पास मौजूदा स्टोर हैं जो आपको बनाए रखने की आवश्यकता है। यह लगभग उन ऐप्स में मामला है जिनके पास कोर डेटा स्टोर में संग्रहीत उपयोगकर्ता डेटा है। और जब तक आपके पास एक स्वचालित आयात उपकरण या डेटा स्टोर जनरेशन उपयोगिता न हो, तब तक आपके मौजूदा स्थिर स्टोरों को माइग्रेशन की भी आवश्यकता होती है।

0

आपको जेनरेशन गैप डिज़ाइन पैटर भी देखना चाहिए। यह आपको वास्तव में इस स्थिति में मदद करेगा। Here CoreData के साथ एक पीढ़ी के अंतर का उपयोग करने के बारे में एक SO सवाल है।

9

ग्राउंडहॉग बताते हैं कि, आपके डेटा मॉडल में जटिल परिवर्तनों के लिए आपको अपने मॉडल के संस्करण बनाने और पुराने मॉडल के तहत डेटा को माइग्रेट करने की आवश्यकता होगी, इस मामले पर ऐप्पल की मार्गदर्शिका के बाद (जिसे वह लिंक करता है) । एसक्यूएल के पीछे के किसी भी दृश्य के बारे में चिंता न करें, कोर डेटा आपके लिए हैडल करता है।

हालांकि, सरल डेटा मॉडल में बदलाव के लिए, ऐप्पल ने कोर डेटा के आईफोन ओएस 3.0 कार्यान्वयन में lightweight migration नामक एक नई सुविधा पेश की है। लाइटवॉइट माइग्रेशन के लिए, कोर डेटा स्वचालित रूप से आपके डेटा मॉडल में सरल परिवर्तनों में माइग्रेट हो जाएगा, जैसे किसी विशेषता या इकाई का नाम बदलना, विशेषता को हटाना, डिफ़ॉल्ट मान के साथ एक विशेषता जोड़ना, या किसी इकाई की विरासत को बदलना। आपको पुराने संस्करण के नाम को किसी चीज़ के लिए इंगित करने के लिए नए संस्करण में नाम बदलने वाले पहचानकर्ता में प्रवेश करने की आवश्यकता है। कोर डेटा आपके डेटा के अपडेट को एक कुशल तरीके से संभाल लेगा, जब तक कि आप एनएसएमआईजीआरपीर्सिस्टेंट्सट्रेसऑटमैटिकलीऑप्शन और एनएसआईएनफर मैपिंग मॉडेल स्वचालित रूप से विकल्प विकल्प सेट करें आपका लगातार स्टोर

+2

मैंने पाया है [कोर डेटा माइग्रेशन और वर्जनिंग] (http://www.timisted.net/blog/archive/core-data- माइग्रेशन/) एप्पल के दस्तावेज में छोड़े गए रिक्त स्थान में काफी स्पष्ट रूप से भर जाता है। एक्सकोड में 'डिज़ाइन> डेटा मॉडल> ​​मॉडल संस्करण जोड़ें' वह चरण था जिसे मैं याद कर रहा था। –

+0

कृपया ध्यान दें: मौजूदा ऑब्जेक्ट्स के नए विशेषताओं के लिए डिफ़ॉल्ट मान सेट प्राप्त करने के लिए आपको "वैकल्पिक" ध्वज अनचेक करना होगा। – Klaas

+0

@SununInman लिंक उपलब्ध नहीं है –