2014-09-15 7 views
6

नहीं कहा जाता है मेरा ऐप स्टैनफोर्ड कोर्स के CoreDataTableViewController का उपयोग करता है, जो UITableViewController का उप-वर्ग है।UITableViewController subclass UIDataSourceModelAssociation प्रोटोकॉल लागू करता है लेकिन इसकी विधियों को कभी भी

मेरे ऐप के विशेष विचारों के लिए मैं एक विशेष दृश्य को प्रबंधित करने के लिए CoreDataTableViewController के उप-वर्ग बना देता हूं।

मैंने हाल ही में अपने अधिकांश ऐप में राज्य एन्कोड और बहाली को जोड़ दिया है और यह सब ठीक काम कर रहा है। एकमात्र चीज जिसे मैंने देर से छोड़ा है, UIDataSourceModelAssociation प्रोटोकॉल को कथित तौर पर UITableViews की दृश्यमान और चयनित पंक्तियों को संरक्षित करने के लिए कार्यान्वित कर रहा है (मैं यह भी उम्मीद कर रहा था कि यह तालिका दृश्य की संपादन स्थिति को संरक्षित रखे, और किसी विशेष पंक्ति के लिए यदि मैंने इसे चुना है हटाएं, लेकिन अभी तक पुष्टि नहीं की है)।

मुझे उम्मीद है कि यह सिर्फ तब मेरे सारे विचारों के लिए काम करेगा CoreDataTableViewController भीतर UIDataSourceModelAssociation लागू किया है, लेकिन मैं देख रहा हूँ यह सुविधा काम नहीं करता है डीबगिंग, और जोड़ने breakpoints पर कि दो UIDataSourceModelAssociation तरीकों में से न तो कभी कहा जाता है जब मैं मेरे ऐप को होम बटन के साथ पृष्ठभूमि में रखें, या एक्सकोड में फिर से चलकर इसे ठंडा रखें।

कोरडाटाटेबल व्यू कंट्रोलर और इसके मेरे सबक्लास इस डेटा दृश्य में पंक्तियों को वास्तव में प्रदर्शित करने के लिए कुछ डेटा स्रोत विधियों को लागू करते हैं। मैंने चारों ओर खोज की है और पाया है कि UITableViewController स्वचालित रूप से तालिका दृश्य के लिए डेटा स्रोत के रूप में खुद को जोड़ता है।

मैं जोड़ दिया है विवेक का दावा में मेरी उपवर्गों रूप

assert(self.tableView); 
assert(self.tableView.dataSource == self); <--- fails here 

कौन सा डेटा स्रोत अपने आप को किया जा रहा है की जाँच पर विफल रहता है के कार्यों viewDidLoad। मैं लॉग इन करके और डीबगर का उपयोग करके देख सकता हूं कि इस बिंदु पर डेटा स्रोत गैर-शून्य है।

मुझे लगता है कि मैंने अभी सोचा था कि जब हम कक्षा को उप-वर्ग करते हैं तो प्रत्येक वर्ग एक ही स्व मूल्य साझा करता है, या ऐसा इसलिए है क्योंकि मेरे UITableViewController ने स्वयं को डेटा स्रोत के रूप में सेट कर दिया है, लेकिन जब तक मैंने इसे दो बार घटाया है मेरा विशेष दृश्य उदाहरण यह स्वयं माता-पिता UITableViewController से थोड़ा अलग है। या डेटासोर्स को अवरुद्ध करने और आवश्यकतानुसार अग्रेषण करने के लिए कुछ और है। एक फिक्स के रूप में मुझे अपने स्वयं के सबक्लास को स्वयं को हार्डकोड करने पर विचार करना चाहिए, या CoreDataTableViewController को डेटा स्रोत के रूप में स्वयं को जोड़ना चाहिए क्योंकि यह वह जगह है जहां UIDataSourceModelAssociation विधियां लागू की गई हैं।

संदर्भ के लिए मेरे दृश्य पदानुक्रम में मेरे UITableViewController subclassed विचार शामिल हैं जो नेविगेशन नियंत्रकों के अंदर रह रहे हैं जो मैंने सुना है मुद्दों का कारण बन सकता है।

कक्षाओं में स्वयं पॉइंटर्स के संबंध में सबक्लासिंग कैसे काम करना चाहिए और यह सोचकर कि क्या कोई भी यह समझ सकता है कि मेरे प्रोटोकॉल विधियों को क्यों नहीं कहा जा रहा है, इसकी वास्तव में सराहना की जाएगी।

चीयर्स

उत्तर

1

मैं अभी भी यकीन है कि क्यों मेरे tableViewController के डेटा स्रोत सीधे आत्म करने के लिए सेट नहीं है नहीं कर रहा हूँ। लेकिन स्पष्ट रूप से मेरे डेटा स्रोत विधियों को मेरी तालिका दृश्य कार्यों के रूप में बुलाया जाता है। जाहिर है कि कुछ प्रकार की ऑब्जेक्ट मेरे लिए मेरे वास्तविक वर्ग में डेटा स्रोत विधियों पर अग्रेषित कर रही है ...

अंत में UIDataSourceModelAssociation प्रोटोकॉल विधियों को कॉल करने के लिए यह सुनिश्चित करने के लिए सरल था कि UITableViewController और UITableView दोनों में बहाली हो आईडी .. केवल बाहरी UITableViewController के साथ एक बहाली आईडी है, इनमें से कोई भी तरीका नहीं कहा जाता है।

अफसोस की बात है कि अब मेरे UIManagedDocument लोड होने से पहले इन तरीकों से मुझे बुलाया जा रहा है, इसलिए मैं वास्तव में उनके भीतर कुछ भी उपयोगी नहीं कर सकता। हालांकि यह एक और समस्या है।

+0

आपके इनपुट के लिए धन्यवाद, मुझे यह "व्यवहार" भी सामना करना पड़ा। यह सुनिश्चित करना कि UITableViewController subclass की 'डेटा स्रोत' संपत्ति स्पष्ट रूप से स्वयं (या जो कुछ भी) पर सेट हो, उसे UIDataSourceModelAssociation विधियों को बुलाया गया हो। –

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