2012-06-09 18 views
12

मैं यह पता लगाने की कोशिश कर रहा हूं कि गतिशील कोशिकाओं (मुझे लगता है) के अलावा कुछ स्थिर कोशिकाओं को कैसे प्राप्त किया जाए, लेकिन जब मैं एक नया मास्टर-विस्तार ऐप शुरू करता हूं और डिफ़ॉल्ट गतिशील प्रोटोटाइप को स्विच करता हूं स्टेटिक सेल, यह दुर्घटनाग्रस्त हो जाता है।स्थिर कोशिकाओं बनाम गतिशील कोशिकाओं के बारे में भ्रम

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

मैं कोड शामिल कर सकता हूं लेकिन मूल रूप से, मैं एक नया मास्टर-विवरण बना देता हूं, स्टेटिक सेल पर स्विच करता हूं, तीन कोशिकाओं का नाम बदलता हूं और यह क्रैश (मुख्य पाश में) बदल जाता है।

सब कुछ के लिए धन्यवाद।

+0

क्या आप स्टैक ट्रेस साझा कर सकते हैं? – sosborn

उत्तर

45

अगर मैं अपने प्रश्न को समझते हैं, इस स्पष्टीकरण के लिए आप देख रहे हैं:

प्रोटोटाइप (पुनर्प्रयोग):

आप गतिशील कोशिकाओं का उपयोग करते हैं, तो आप प्रोटोटाइप कोशिकाओं का उपयोग। इसका अर्थ यह है कि या तो आईबी में या आपके कोड में, आप UITableViewCell का उदाहरण बनाते हैं, और इसे पहचानकर्ता (reuseIdentifier) दें। UITableView इस प्रोटोटाइप का उपयोग करने के लिए आपको जितनी आवश्यकता हो उतनी कोशिकाओं (पंक्तियों) उत्पन्न करने के लिए उपयोग करता है। UITableView स्क्रीन को भरने की आवश्यकता के रूप में कई सेल्स के लिए (और स्मृति का उपयोग करें) बनाएं। एक बार इन कोशिकाओं के कुछ स्क्रीन बंद जाना, UITableViewपुनः उपयोग कर लेता उन्हें - उन्हें recycles।

आप एक UITableView में एक से अधिक एक प्रोटोटाइप सेल परिभाषित कर सकते हैं। विचार यह है कि प्रत्येक प्रोटोटाइप एक अलग उद्देश्य प्रदान करता है। उदाहरण के लिए, आप प्रोटोटाइप सेल को परिभाषित करते हैं जिसमें केवल एक बड़ा UILabel होता है और इसका उद्देश्य स्थिर पाठ का उपयोग करना है। आप एक और प्रोटोटाइप परिभाषित करते हैं जिसमें केवल एक UIImageView है। यह आपके डिज़ाइन पर निर्भर करता है और आप अपना डेटा कैसे प्रदर्शित करना चाहते हैं।

प्रोटोटाइप कोशिकाओं का उपयोग करने के लिए, आईबी में, आप गतिशील प्रोटोटाइप कोशिकाओं उपयोग करते हैं, और एक identifier निर्धारित किया है।

– tableView:numberOfRowsInSection: 
– tableView:cellForRowAtIndexPath: 

इन विधियों UITableView के प्रतिनिधि तरीके हैं: तो फिर तुम जैसे UITableViewDataSource तरीकों को लागू करने की है।

आईबी का उपयोग नहीं हैं, तो आप – tableView:cellForRowAtIndexPath: विधि में कोशिकाओं बनाना होगा:

UITableViewCell * सेल = [[UITableViewCell alloc] initWithStyle: (UITableViewCellStyle) शैली reuseIdentifier: (NSString *) reuseIdentifier];

स्थैतिक:

स्थिर कोशिकाओं के विचार सिर्फ सादगी है। आप प्रोटोटाइप कोशिकाओं (जैसे केवल एक प्रोटोटाइप) का उपयोग कर सकते हैं और एक स्थिर NSArray में फ़ीड कर सकते हैं, उदाहरण के लिए, डेटा स्रोत के रूप में। UITableViewDataSource विधियों को लागू करने का कार्य करने के लिए, ऐप्पल ने स्थिर कोशिकाएं पेश कीं, जहां आप केवल स्टोरीबोर्ड और आईबी का उपयोग करेंगे। आईबी में, आप तालिका दृश्य का चयन करते हैं, और स्टेटिक सेल इसके बजाय, और अपना टेक्स्ट टाइप करें या छवि सेट करें चुनें। जब आप ऐप चल रहे हैं तब आप स्थिर कोशिकाओं में कोई गतिशील परिवर्तन नहीं करना चाहते हैं क्योंकि इसका मतलब नहीं है, और आपको कई और तरीकों को लागू करना होगा जो इसके लायक नहीं हैं। हालांकि चयनित पंक्ति के indexPath प्राप्त करने के लिए यह बहुत अधिक काम नहीं है, लेकिन विचार यह है कि यदि आपको स्थिर सेल के चयन से नया दृश्य धक्का देना है, तो आप किसी भी कोड को लागू करने के बजाय, segues का उपयोग करेंगे।

स्थिर कोशिकाओं का उपयोग कर, आप UITableViewDataSource विधि आपका ऐप्स क्रैश को लागू करना चाहिए नहीं, नहीं तो, और इसके विपरीत, यदि आप UITableViewDataSource तरीकों (आवश्यक वाले) जब प्रोटोटाइप कोशिकाओं का उपयोग कर, यदि आपका ऐप्स क्रैश को लागू नहीं करते।

+0

मैं इसे एक फिनूटुट कंघी के साथ जाने जा रहा हूं (क्या आपने इसे इसके लिए लिखा था? या आपने इसे कहीं कहीं पाया?) लेकिन UITableViewDataSource विधियों से छुटकारा पाने के लिए चाल ("संख्याऑफ्रोसइनसेक्शन" जोड़ना था। –

+2

खुशी है कि यह काम करता था। क्या यह सिर्फ तुम्हारे लिए था! हालांकि आप वहां अधिक व्यापक स्पष्टीकरण पा सकते हैं। शुभकामनाएँ! – Canopus

+0

इस सब से मैंने सीखा एक अच्छी बात यह है कि कक्षा संदर्भ (आयोजक - दस्तावेज़ीकरण) में व्यापक दस्तावेज है। अगली बार मैं पोस्ट करने से पहले सभी लागू कक्षा संदर्भ डॉक्स पढ़ूंगा! –

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