मैंने उसी व्याख्यान श्रृंखला का बहुत बारीकी से पालन किया। यह विशेष उदाहरण फ़्लिकर से डेटा (फोटोग्राफर और तस्वीरें) खींचता है और उन्हें कोरडाटा में लोड करता है। इस ऐप में कोरडाटा का उपयोग करना वास्तव में आवश्यक नहीं था क्योंकि इसे प्रत्येक एप्लिकेशन लोड पर फ़्लिकर से नया डेटा लाने की आवश्यकता है, इसलिए लगातार बचत में कोई बिंदु नहीं है। प्रोफेसर सिर्फ पिछले डेमो से फ्लिकर फ़ेचिंग ऐप का उपयोग शुरुआती बिंदु के रूप में कर रहा था क्योंकि छात्र पहले से ही परिचित थे (उन्हें कोरडाटा समझाते हुए ध्यान केंद्रित करने की अनुमति दी गई थी)। हालांकि, जैसा कि रिकस्टर का उल्लेख है, डिस्क पर संदर्भ सहेजने के बिना कोर डेटा का उपयोग करने के लिए बहुत सारे फायदे हैं।
के रूप में पॉल डेमो से पहले व्याख्यान में बताया गया है, एक कोर डेटाबेस (iOS5 में) बनाया जा सकता है या तो द्वारा: एक नई परियोजना बनाते समय एप्लिकेशन टेम्पलेट के लिए
- क्लिक करना "उपयोग कोर डेटा"।
-
पहले दृष्टिकोण के पीछे विचार यह UIManagedDocument का उपयोग करना है कि Xcode AppDelegate में कोड का एक गुच्छा डाल अपने दस्तावेज़ों निर्देशिका/लगातार दुकान समन्वयक/और मॉडल स्थापित करने के लिए नहीं है। इसके बाद यह प्रबंधित ऑब्जेक्ट CONTEXT को आपके प्रारंभिक व्यू कंट्रोलर (जिसमें सार्वजनिक एपीआई में एनएसएमएनेज ऑब्जेक्ट कॉन्टेक्स्ट प्रॉपर्टी होनी चाहिए) को पास कर दिया जाएगा और वहां से आप अन्य व्यू कंट्रोलर को सीगू करते समय बियर की बोतल की तरह संदर्भ पास कर सकते हैं। कोर डेटाबेस तक पहुंचने के लिए संदर्भ को पास करना सही प्रक्रिया है।
UIManagedDocument का उपयोग करना बहुत समान है, सिवाय इसके कि आपके ऐपडिलेगेट को अकेला छोड़ दिया गया है। आप अपने ऐप की दस्तावेज़ निर्देशिका से यूआरएल पथ का उपयोग करके एक UIManagedDocument (शायद आपके प्रारंभिक दृश्य नियंत्रक में) बनाते हैं (नोट: आपको यह देखने के लिए मैन्युअल रूप से जांचना होगा कि फ़ाइल पहले से बाहर निकली है, मौजूद है लेकिन खुला नहीं है, या मौजूद नहीं है)। फिर आप उपरोक्त के रूप में इस दस्तावेज़ के संदर्भ का उपयोग कर सकते हैं।
एक और नोट: अपने ऐपडिलेगेट में अपने संदर्भ में पॉइंटर बनाने का अच्छा विचार है ताकि आप अपने संदर्भ को स्पष्ट रूप से सहेज सकें (केवल जब यह तैयार हो!) जब ऐप क्रैश हो जाए या समाप्त हो जाए।
लगातार स्टोर समन्वयक स्वचालित रूप से आपके लिए सेट अप किया गया है और आप इसे लगातार जारी रखने के लिए इसे कॉन्फ़िगर कर सकते हैं (और वास्तव में आपको संदर्भ को लगातार सहेजने के लिए), या UIManagedDocument subclassing और वांछित विधियों को ओवरराइड करके इसे कॉन्फ़िगर कर सकते हैं।
UIManagedDocument प्रलेखन http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.html
में अवलोकन पढ़ें दोनों ही तरीकों से एक ही तरह से काम करते हैं और एक ही नियंत्रण और पहुँच प्रदान करते हैं। UIManaged दस्तावेज़ों के साथ आप एकाधिक SQLite फ़ाइलों में एकाधिक डेटाबेस बना सकते हैं, आप इसकी आवश्यकता होने तक डेटाबेस बनाने/सेट अप करने के लिए भी प्रतीक्षा कर सकते हैं। "कोर डेटा का उपयोग करें" विकल्प आपको एक एकल कोर डेटाबेस प्रदान करता है जो इसे एप्लिकेशन लोड पर सेट करता है, आपको ऐपडिलेगेट के आसपास कोरडाटा सामान को केंद्रीकृत करने की अनुमति देता है, कोडिंग समय बचाता है और एक फास्ट-ट्रैक ऐप के लिए अच्छा है। मुझे UIManagedDocument पसंद है।
यदि आपने कोर डेटा विकल्प के बिना ऐप शुरू किया है और इसे ऐपडिलेगेट में जोड़ना चाहते हैं, तो बस मूल डेटा के साथ एक नई परियोजना बनाएं और अपने कोड को अपने ऐपडिलेगेट में कॉपी करें (केवल 3 गुण और उनके एक्सेसर्स होना चाहिए दस्तावेज़ निर्देशिका तक पहुंचने के लिए एक सुविधाजनक तरीका भी)। आपको अपने प्रारंभिक दृश्य नियंत्रक, मॉडल, आदि में इंगित करने की आवश्यकता होगी ..
अद्यतन: बस एक और सुविधा जोड़ना चाहता था। अपने प्रबंधित वस्तु संदर्भ अपने AppDelegate में संग्रहीत किया जाता है, तो आप उसे अपने ऐप्लिकेशन में कहीं भी बस
NSManagedObjectContext* context = [[(AppDelegate*) [UIApplication sharedApplication] delegate] myManagedObjectContext];
इस होने को नकारता का उपयोग कर उसके चारों ओर पारित करने के लिए तक पहुंच सकते हैं।
किसी भी कोरडाटा ऐप के लिए, यदि आप अपने मॉडल में कोई बदलाव करते हैं, तो मैन्युअल रूप से निर्माण करने से पहले सिम्युलेटर में एप को हटा दें सुनिश्चित करें। अन्यथा आपको अगले निर्माण पर एक त्रुटि मिलेगी क्योंकि यह पुरानी फ़ाइल का उपयोग करेगी।
उस लंबे हवादार उत्तर के शीर्ष पर मैं आपको कहीं भी संदर्भ को पकड़ने के लिए अपने ऐपडिलेगेट में बैक-पॉइंटर का उपयोग करूंगा, लेकिन पसंदीदा दृष्टिकोण नहीं। – Patrick
बिल्कुल शानदार जवाब। इसके अलावा - यहां UIManahegDocument को सहेजने के लिए एक कोड स्निपेट: [दस्तावेज़ saveToURL: document.fileURL forSaveOperation: UIDocumentSaveForOverwriting completHandler: NULL]; – brainray