9

के लिए डिज़ाइन पैटर्न मैं एक ऐप बना रहा हूं जो कोर डेटा मॉडल का उपयोग करेगा। मैं उद्देश्य सी पर बहुत नया हूं और मेरे सामान्य डिजाइन पैटर्न वास्तव में कोर डेटा और ऑब्जेक्टिव सी पर लागू नहीं होते हैं, कम से कम मुझे ऐसा उदाहरण नहीं मिल रहा है जो पुष्टि करता है कि वे करेंगे।कोर डेटा आईफोन ऐप

मैं ऐप्पल डेवलपर उदाहरणों और इंटरबेट्स पर विभिन्न स्रोतों के माध्यम से रहा हूं।

ऐसा नहीं है कि कोर डाटा लाभ उठाने के लिए मैं अपने viewControllers से प्रत्येक के लिए managedObjectContext पास करनी होगी ViewController NSFetchedResultsControllerDelegate को लागू करने और फिर एक लाने और बाद में लागू करने के लिए तरीकों में से प्रत्येक को लागू किया है लगता है

NSFetchedResultsChangeInsert 

NSFetchedResultsChangeDelete NSFetchedResultsChangeMove NSFetchedResultsChangeUpdate

यह प्रत्येक ViewController में कोड के लगभग 100 + लाइनों कहते हैं और यह 90% एक ही कोड मैं बार-बार लिखते हैं। इसके अलावा मुझे चारों ओर सबकुछ पास करना होगा और इसकी स्मृति पदचिह्न का ट्रैक रखना होगा।

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

मुझे उम्मीद है कि यह समझ में आता है और कोई भी या तो पुष्टि कर सकता है कि ऐसा करने का कोई अन्य उचित तरीका नहीं है या इसे एक अच्छी तरह से लपेटने के लिए दिशा में मुझे इंगित करने में मदद करें।

धन्यवाद :)

+0

यहां एक समान प्रश्न पूछा गया था, जो सहायक भी हो सकता है: http://stackoverflow.com/questions/1267520/where-to-place-the-core-data-stack-in-a-cocoa-cocoa- टच-एप्लिकेशन –

उत्तर

19

कोर डेटा लगभग उतना ही जटिल नहीं है जितना आप वर्णन करते हैं।

आम तौर पर, एक आईफोन ऐप में "मुख्य" प्रबंधित ऑब्जेक्ट संदर्भ होता है, जिसका आमतौर पर ऐप प्रतिनिधि होता है। जब तक आप ऐप प्रतिनिधि प्राप्त कर सकते हैं (संकेत: [[UIApplication sharedApplication] delegate]) आपके पास प्रबंधित ऑब्जेक्ट संदर्भ तक पहुंच है। मैं जीवन को आसान बनाने के लिए अपने ऐप प्रतिनिधि के संदर्भ में एक स्थिर वैश्विक चर परिभाषित करना चाहता हूं।

आम तौर पर NSFetchedResultsController उदाहरणों और UITableView उदाहरणों के बीच एक-से-एक पत्राचार होता है। तालिका दृश्यों को पॉप्युलेट करने के अलावा, यह बहुत दुर्लभ है कि आपको NSFetchedResultsController की आवश्यकता होगी। यदि आपके पास कई समान विचार हैं (उदाहरण के लिए एक टैब बार जो आपको एक ही डेटा को ला आईपॉड ऐप के विभिन्न तरीकों से देखने देता है), तो यह आपको एक एकल बेस क्लास बनाने के लिए व्यवहार करेगा जो NSFetchedResultsController को कॉन्फ़िगर करता है और आपके विशिष्ट दृश्य नियंत्रक प्राप्त करता है उसमें से।

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

जब आप संपादन कर लेंगे, तो आप save: प्रबंधित ऑब्जेक्ट संदर्भ देखेंगे। आपके अन्य प्रबंधित ऑब्जेक्ट संदर्भों को प्रबंधित करने वाली ऑब्जेक्ट्स को तालिका दृश्य को सिंक में रखने के लिए NSFetchedResultsControllerDelegate विधियों को लागू करना चाहिए। दोबारा, इसे बेस क्लास में कार्यान्वित किया जा सकता है ताकि आप संबंधित कार्यक्षमता नियंत्रकों के लिए इस कार्यक्षमता को सामान्यीकृत कर सकें।

+0

कृपया, क्या आप इस आधार वर्ग के नमूने का नमूना प्रदान कर सकते हैं? – Esteve

0

क्या आपको बिल्कुल कोरडाटा मॉडल का उपयोग करना है, या एनएससीओडर (एनएसएआरसीआईवर, एनएसकेड आर्चिवर, आदि) का उपयोग करने वाला कुछ काम करेगा? मैंने पाया है कि ज्यादातर अनुप्रयोगों के लिए कोरडाटा अधिक है।

इसके अलावा, क्या आप स्पष्ट कर सकते हैं कि आप सिंगलेट का उपयोग करके दृष्टिकोण क्यों नहीं ले सकते? मैंने मुद्दों के बिना कई अनुप्रयोगों में सिंगलटन कारखानों का उपयोग किया है। साझा (सिंगलटन) उदाहरण पर संचालित क्लास-स्तरीय विधियों को परिभाषित करना काफी आसान है।

+0

एलेक्स आप सही हैं :) मैंने परिणामों को उड़ा दिया है नियंत्रक अनुपात से थोड़ी दूर है क्योंकि मेरे पास 3 अन्य टेबलव्यू एक साथ बंधे हुए थे, अन्य सभी विचारों में एक परिणाम नियंत्रक व्यर्थ होगा। तो प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट ऑब्जेक्ट का उपयोग करके जो मेरे ऐप प्रतिनिधि में [यूआईएपीप्लिकेशन साझा अनुप्रयोग] प्रतिनिधि के माध्यम से तत्काल है)) जाने का तरीका है, यह समझ में आता है, एक सिंगलटन की तरह थोड़ा। डी कार्नी, मैं एक बड़ा मॉडल बनाए रखूंगा और यह एक वेब सेवा के खिलाफ सिंक हो जाएगा जैसे मॉडल (मेरे डेटा का एक स्थानीय और वैश्विक संस्करण) तो मुझे लगता है कि कोर डेटा सामान है। – RickiG

+0

मुझे यकीन नहीं है कि सिंगलटन दृष्टिकोण काम नहीं करेगा, लेकिन अगर डेटा तैयार नहीं था या सहेजा नहीं जा सका तो मुझे समय-समय पर समस्याएं मिलेंगी। दोनों का धन्यवाद, मुझे लगता है कि मुझे प्रबंधित ऑब्जेक्ट कॉन्टेक्सट्स और कोर डेटा के विकल्प पर थोड़ा स्पष्ट दृश्य मिला है :) – RickiG

+0

एक सिंगलटन इंस्टेंस पर चलने वाले तरीके उदाहरण विधियों, वर्ग विधियों के अनुसार नहीं हैं। –

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