2010-07-26 16 views
6

मैं अपने नवीनतम आईफोन ऐप में कोरडाटा का उपयोग कर रहा हूं। मुझे शुरुआत में यह जटिल लगता है लेकिन मुझे लगता है कि जब आपको किसी iPhone ऐप (http://inessential.com/2010/02/26/on_switching_away_from_core_data) में ऑब्जेक्ट्स स्टोर करने की आवश्यकता होती है तो यह सबसे अच्छा विकल्प है।कोरडाटा सर्वोत्तम प्रथाओं

क्या आईफोन ऐप में कोरडाटा का उपयोग करते समय कोई सर्वोत्तम प्रथा है? उदाहरण के लिए, मैं नहीं चाहता कि मेरे सभी नियंत्रक इस NSManagedObjectContext से निपटें जो आपको अनुरोध करना चाहते हैं। क्या आप कोरडाटा अनुरोधों के लिए कक्षा को परिभाषित करते हैं?

+0

धन्यवाद बोल्टक्लॉक, मुझे इस सुविधा के बारे में पता नहीं था! –

+0

संभव डुप्लिकेट [कोको/कोको टच एप्लिकेशन में "कोर डेटा स्टैक" कहां रखा जाए] (http://stackoverflow.com/questions/1267520/where-to-place-the-core-data-stack-in -एक-कोको-कोको-स्पर्श आवेदन) –

उत्तर

6

मैं आमतौर पर मेरी कोर डाटा ढेर और संबंधित वस्तुओं और व्यवहार का प्रबंधन करने के लिए एक समर्पित वस्तु बनाने के। यह उपयोगी है क्योंकि कोर डेटा के साथ बहुत बॉयलर प्लेट है इसलिए मैं एक सामान्य आधार प्रबंधक वर्ग बना सकता हूं और फिर प्रत्येक ऐप के लिए उप-वर्ग का उपयोग कर सकता हूं। मैं आमतौर पर इसे AppNameDataModel कहते हैं।

मैं डेटामोडेल ऑब्जेक्ट के अंदर प्रबंधित ऑब्जेक्ट संदर्भ को छिपाना पसंद करता हूं। यह ऐप में अन्य ऑब्जेक्ट्स को कोरोड स्टैक तक पहुंच के लिए डेटामोडेल ऑब्जेक्ट से पूछने के लिए मजबूर करता है जो अच्छी encapsulation और सुरक्षा देता है।

आमतौर पर, मैं डेटा मॉडेल क्लास में इकाइयों के लिए fetches वापस करने के लिए विधियां बनाते हैं उदा।

-(NSFetchRequest *) entityNameFetch; 

... और फिर डेटामॉडल में एक performFetch विधि है। उपयोग में, एक नियंत्रक किसी इकाई के लिए एक फ़ेच के लिए पूछता है, fetch को कॉन्फ़िगर करता है और फिर डेटामोडेल को fetch करने और परिणामों को वापस करने के लिए कहता है। आप उन विधियों की पीढ़ी को स्क्रिप्ट कर सकते हैं जो fetch को लौटाते हैं और प्रदर्शन फ़ेच बॉयलर प्लेट भी है। यह सब बहुत समय बचाता है खासकर प्रोटोटाइप करते समय।

डेटामोडेल उदाहरण का संदर्भ स्वयं नियंत्रक से नियंत्रक तक पारित किया जा सकता है लेकिन मुझे लगता है कि यह सिंगलटन पैटर्न का एक वैध उपयोग है, इसलिए मैं अक्सर डेटामोडेल को सिंगलटन बना देता हूं और इसे एक्सेस करने के लिए किसी संपत्ति के लिए UIViewController पर एक श्रेणी प्रदान करता हूं ।इसका मतलब है कि प्रोजेक्ट में जो भी व्यू कंट्रोलर जोड़ता है, वह स्वचालित रूप से डेटामोडेल तक पहुंच प्राप्त करता है।

यह पैटर्न सब कुछ अच्छी तरह से encapsulated और मॉड्यूलर रखता है। यह नए विचारों को जोड़ने या परियोजनाओं के बीच डेटा मॉडल साझा करना आसान बनाता है। प्रारंभ में स्थापित करने में थोड़ा सा काम लगता है लेकिन एक बार आपके पास बेस क्लास हो जाने के बाद, भविष्य का उपयोग बड़े पैमाने पर बढ़ जाता है।

1

धन्यवाद इस प्रश्न को इंगित करने के लिए ब्रैड।

जैसा कि ऐप्पल दस्तावेज [1] पर उल्लेख किया गया है, संदर्भ को प्रत्येक नए दृश्य नियंत्रक को पास करना होगा जिसे कोरडाटा की आवश्यकता है।

iPhone पर:

परंपरा के मुताबिक, आप अक्सर एक दृश्य नियंत्रक से एक संदर्भ प्राप्त कर सकते हैं। हालांकि, इस पैटर्न का पालन करने के लिए आप पर निर्भर है। जब आप कोर डेटा के साथ एकीकृत दृश्य नियंत्रक को लागू करते हैं, तो आप एक NSManagedObjectContext प्रॉपर्टी जोड़ सकते हैं।

एक व्यू कंट्रोलर आम तौर पर आवेदन प्रतिनिधि जैसे वैश्विक वस्तु से संदर्भ पुनर्प्राप्त नहीं करना चाहिए। यह अनुप्रयोग वास्तुकला कठोर बनाने के लिए जाता है। न तो एक व्यू कंट्रोलर आमतौर पर अपने स्वयं के उपयोग के लिए एक संदर्भ बनाना चाहिए। इसका मतलब यह हो सकता है कि नियंत्रक के संदर्भ का उपयोग करके किए गए संचालन अन्य संदर्भों के साथ पंजीकृत नहीं हैं, इसलिए अलग-अलग दृश्य नियंत्रकों के डेटा पर अलग-अलग दृष्टिकोण होंगे।

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

[1] - http://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html#//apple_ref/doc/uid/TP40008283

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