5

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

इससे पहले कि मैं ऐप के लेखन में फंस गया, मैं यह सुनिश्चित करना चाहता हूं कि मेरे मन में कुछ महत्वपूर्ण अवधारणाएं स्पष्ट हों, विशेष रूप से वास्तुकला से संबंधित।

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

नियंत्रकों देखें

  • तो UINavigationControllers आम तौर पर उप-श्रेणी में नहीं कर रहे हैं और AppDelegate में एक संपत्ति के रूप में बनाई गई हैं और MainWindow.xib के मुख्य उप-दृश्य 'कर रहे हैं।

  • UINavigationController विचारों के ढेर को नियंत्रित करता है, और आमतौर पर रूट व्यू कंट्रोलर के साथ शुरू किया जाता है।

  • नेविगेशन नियंत्रक को आमतौर पर संदर्भित किया जाता है और वर्तमान/शीर्ष दृश्य नियंत्रक के भीतर से [स्वयं नेविगेशन नियंत्रक] के रूप में संदेश भेजा जाता है जो UIViewController पैरेंट क्लास की एकमात्र संपत्ति है।

कोर डाटा

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

  • संदर्भ ऐप प्रतिनिधि में एक संपत्ति के रूप में बनाया गया है और फिर इसे शुरू करने के लिए रूट व्यू कंट्रोलर को पास कर दिया गया है जो नेविगेशन नियंत्रक को दृश्य बदलने के लिए कहने से पहले इसे स्टैक में बाद के विचारों में भेजता है (उदाहरण के लिए जब एक सेल टैप किया जाता है)।

तो यह मुझे यहाँ करने के लिए एक सप्ताह में ले लिया है, मैं अपने मॉडल बना सकते हैं डेटा के साथ इसे भरने के लिए और एक तालिका दृश्य पर प्रदर्शित लेकिन मैं जब आप चाहते हैं पर मोडल दृश्य बहुत ढूँढने में सक्षम नहीं किया गया है डेटा संपादित करने के लिए, विशेष रूप से मोडल दृश्यों को कैसे डिजाइन किया जाए (यदि सामान्य विचारों में कोई विशिष्ट अंतर है)?

इसके अलावा, मैं पूरी तरह से ऑब्जेक्ट देखने के लिए डेटा के पूरे 'बाध्यकारी' के बारे में पूरी तरह से सुनिश्चित नहीं हूं कि यह क्या करता है और इसे प्रोग्रामेटिक तरीके से कैसे किया जाए?

आपकी टिप्पणियों के लिए बहुत धन्यवाद, अग्रिम सुझाव।

उत्तर

2

वर्तमान मॉड्यूल व्यू कंट्रोलर का उपयोग करके प्रदर्शित होने पर एक दृश्य मोडल हो जाता है: एनिमेटेड। आप मोडल व्यू पेश करने से पहले मॉडल के साथ संपादित करने के लिए पास कर सकते हैं।

DetailViewController dvc = ...; 
dvc.model = model; 
dvc.delegate = self; // if you want to use a delegate pattern. 
[self presentModalViewController:dvc animated:YES]; 

के बाद से मॉडल आप संपादित करना चाहते आप viewDidLoad में मूल्यों को निर्धारित कर सकते हैं मॉडल दृश्य नियंत्रक में उपलब्ध है। आईओएस प्लेटफ़ॉर्म पर कोई डेटाबेस उपलब्ध नहीं है जिसका अर्थ है कि आपको दृश्य और अपने मॉडल को मैन्युअल रूप से अपडेट करना होगा।

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.someTextField.text = self.model.someText; 
} 

क्या आप पर विचार करने के लिए जब एक मॉडल को देखने के साथ काम कर की जरूरत है कि आप इसे खारिज करने के लिए एक तरीका प्रदान करना चाहिए है। जैसे रद्द करें और सहेजें बटन के साथ शीर्ष पर नेविगेशन बार करके। एक मॉडल दृश्य नियंत्रक खारिज उपयोग किया जाता है:

[self dismissModalViewControllerAnimated:YES]; 

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

- (IBAction)save:(id)sender { 
    self.model.someText = self.someTextField.text; 
    [self.delegate detailViewControllerDidSave:self]; 
} 

और प्रस्तोता में की तरह एक विधि है:

-(void)detailViewControllerDidSave:(DetailViewController *)controller { 
    // save the model 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

हाय रॉबर्ट, धन्यवाद। तो क्या विवरण ViewController के बारे में कुछ खास है ताकि जब यह मॉड्यूल फ़ील्ड प्रदर्शित हो जाए तो संपादन योग्य हो जाए? – Glynton

+0

आपका स्वागत है। मुझे नहीं लगता कि ऐसा करने का कोई स्वचालित तरीका है। एक UIViewController में एक संपादन प्रॉपर्टी है जिसका उपयोग संपादन संपादन के माध्यम से संपादन संपादन को टॉगल करने के लिए किया जा सकता है: एनिमेटेड:। यदि आप प्रदर्शन और संपादन के लिए एक ही विवरण दृश्य नियंत्रक का उपयोग करना चाहते हैं तो आप कॉल करने के बाद कॉल करने के बाद [dvc setEditing: YES एनिमेटेड: NO] कॉल कर सकते हैं ModalViewController: एनिमेटेड:। फिर आपको setEditing को कार्यान्वित करना होगा: एनिमेटेड: DetailViewController में और उचित नियंत्रण अपडेट करें, जैसे self.someTextField.enabled = संपादित करें। –

+0

"आईओएस पर कोई डेटा बाध्यकारी उपलब्ध नहीं है" - अब सत्य नहीं है: https://www.youtube.com/watch?v=88DkI8ZfEkg - वर्ष के अंत तक जारी किया जाएगा (कुछ ओएस लाइसेंस) – Michael

0

कुछ उत्तरों, विचार/डेटा के मेरे ज्ञान से। मुझे अभी तक कोरडाटा के साथ कोई अनुभव नहीं है, इसलिए वह हिस्सा जवाब नहीं देगा।

  • एक मोडल व्यू केवल एक नियमित दृश्य है। लेकिन इसका आकार थोड़ा अलग हो सकता है, क्योंकि इसमें कुछ यूआई तत्व शामिल हैं जो एक नेविगेशन नियंत्रक में धकेलने वाले दृश्य द्वारा कवर नहीं किए जाएंगे।

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

+0

... इसलिए बाइंडिंग एक आईबी उपकरण के और अधिक कर रहे हैं जहाँ आप वस्तुओं देखने के लिए सेट संस्थाओं के साथ डेटा की एक सरणी है? प्रोग्रामेटिक समकक्ष ओवरराइड कर रहा है - (UITableViewCell *) तालिका दृश्य: (UITableView *) तालिका देखें – Glynton

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