2010-03-04 20 views
5

के लिए कोर डेटा सर्वोत्तम अभ्यास प्रश्न उदाहरण के रूप में ऐप्पल के मेल एप्लिकेशन का उपयोग करना; यह दिखाता है कि यह कोर डेटा का उपयोग करता है। जब आप किसी ईमेल खाते को स्पर्श करते हैं, तो यह आपको उस खाते के सभी संदेशों को दिखाता है। तो नियंत्रक ने उस खाते के सभी संदेशों के लिए एक अनुरोध अनुरोध किया था।नेविगेशन आईफोन ऐप

फिर आप एक संदेश को स्पर्श करते हैं और एक स्तर को गहरा ड्रिल करते हैं, अब आप एक संदेश देख रहे हैं। यह एकल संदेश शायद संदेश सूची नियंत्रक से पारित किया गया था, लेकिन - आप उसी ईमेल खाते में सभी संदेशों को स्थानांतरित करने के लिए ऊपरी दाएं त्रिकोण पर भी क्लिक कर सकते हैं। इसका मतलब है कि एक ईमेल संदेश देखने के लिए व्यू कंट्रोलर को संदेशों की सटीक सूची की भी आवश्यकता होती है।

तो आप सूची दृश्य से fetch अनुरोध तर्क को काट और पेस्ट कर सकते हैं, लेकिन यह DRY/don't-repeat-yourself नहीं है।

इस समस्या को हल करने में सर्वोत्तम अभ्यास के लिए कोई सुझाव?

उत्तर

2

समाधान जो मैं इस समस्या को हल करने के लिए उपयोग कर रहा हूं वह प्रतिनिधि डिजाइन पैटर्न का उपयोग करना है। यानी, रूटव्यू कंट्रोलर और एक विवरण व्यू कंट्रोलर के साथ एक एप्लिकेशन में, rootViewController विस्तार के लिए एक प्रतिनिधि के रूप में कार्य करता है ViewController।

तो, उदाहरण के लिए, जब उपयोगकर्ता (विवरण दृश्य पर) एक ईमेल संदेश को देख रहा है, और वे नए संदेश के लिए पुनरावृति करने के लिए एक बटन पर क्लिक करके detailViewController एक प्रतिनिधि विधि के माध्यम से rootViewController सूचित करता है कि rootViewController जरूरतों एक नया संदेश प्रदर्शित करने के लिए।

इस प्रकार, विवरण दृश्य नियंत्रक केवल प्रत्येक मॉडल ऑब्जेक्ट (ईमेल प्रदर्शित होने के बारे में) के बारे में जानकारी जानना आवश्यक है। जबकि rootViewController बातचीत को संभालता है जिसमें शेष वस्तुओं को शामिल किया जाता है।

मेरे लिए, यह ज़िम्मेदारी का एक अच्छा विभाजन है, इसलिए यह वह समाधान है जिसका मैं उपयोग कर रहा हूं।

2

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

+0

धन्यवाद जेसी के सुझावों के लिए बहुत कुछ। ऐप के लिए मैं काम कर रहा था, मुझे लगता है कि यह थोड़ा अधिक होगा, यह एक सापेक्ष सरल ऐप है इसलिए मैं जितना संभव हो सके टेम्पलेट कोड से चिपकना चाहता हूं। लेकिन आपका समाधान लगता है जैसे यह एक जटिल अनुप्रयोग के लिए बहुत उपयोगी होगा। – robenk

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