2009-02-15 13 views
7

मुझे लगता है कि मुझे कुछ आसान याद आ रहा है, लेकिन मैं यह नहीं समझ सकता कि यह वास्तव में क्या है।आईफोन: टैबव्यू + टेबल व्यू

मैं UITabViewController के साथ एक ऐप सेट अप करने का प्रयास कर रहा हूं, और टैब में से एक के पास UITableView और UISearchBar होगा (लेकिन कोई नेविगेशन नियंत्रक नहीं)। मैंने इंटरफ़ेस बिल्डर में सभी टैब के साथ UITabViewController सेट अप किया है, और विचार अपनी स्वयं की xib फ़ाइलों में हैं। UITableView वाले टैब के लिए xib फ़ाइल निम्नानुसार स्थापित और कनेक्ट की गई है।

ब्राउज़र में सामग्री: फ़ाइल के मालिक दृश्य (कक्षा कि UITableViewController का एक बच्चा है अपने कस्टम वर्ग है) -> देखें

View (class UIView, reference view -> File's owner) contains: 
     UITableView (if i try and set references to the data source/delegate, the app breaks) 
     UISearchBar (unconfigured at the moment) 

इस सेटअप सभी आइटम दिखाता है और बंद नहीं है, लेकिन जब मैं UITableView के साथ टैब को आज़माता हूं और लोड करता हूं तो मैं क्रैश होने के बिना डेटासोर्स असाइन नहीं कर सकता। आईबी या कोड में, इस तालिका में डेटा प्राप्त करने के लिए मुझे क्या करना चाहिए? मेरे विचार इस प्रकार हैं:

  1. कस्टम यूआईटीबल व्यू क्लास को लागू करें, आईबी में टेबल व्यू तक या हुक में कस्टम टेबलव्यू कंट्रोलर को हुक करें।
  2. दीवार के खिलाफ पाउंड हेड या लैपटॉप जब तक यह काम नहीं करता है।

अद्यतन: यहाँ त्रुटि सिम्युलेटर कंसोल के लिए धक्का जब मैं मालिक (जो वर्ग अपने कस्टम tableviewcontroller है) फ़ाइल tableview के डेटा स्रोत और प्रतिनिधि कनेक्ट है।

2/14/09 6:59:12 PM पर TabBarWillbeRight [33172] * न आया हुआ अपवाद 'NSInvalidArgumentException', कारण की वजह से एप्लिकेशन समाप्त: '* - [UIViewController tableView: numberOfRowsInSection:]: गैर मान्यता प्राप्त चयनकर्ता भेजा उदाहरण के लिए 0x523760

उत्तर

1

यदि आप डेटासोर्स को क्रैश किए बिना असाइन नहीं कर सकते हैं, तो यह सुझाव देता है कि कुछ डेटासोर्स प्रतिनिधि विधियों को लागू नहीं किया गया है।

विशेष रूप से कक्षा आप डेटा स्रोत के रूप बताए जाते हैं UITableViewDataSource

को लागू करना चाहिए
+0

मैं numberOfSectionsInTableView, numberOfRowsInSection, और cellForRowAtIndexPath लागू किया, और वे सभी वापसी 1, 1, और के साथ एक सेल स्थैतिक सेल.टेक्स्ट। क्या मुझे एक विधि याद आई? –

+0

ऐसा नहीं होना चाहिए। यद्यपि सटीक होने के लिए यह तालिका दृश्य है: संख्याऑफरोइन्सइनसेक्शन और तालिका दृश्य: cellForRowAtIndexPath –

+0

सही - इस तरह वे सेट अप हैं - तो मेरा डेटा स्रोत/प्रतिनिधि वास्तव में क्या होना चाहिए ... मैंने इसे सेटडेटा स्रोत के साथ सेट करने का प्रयास किया है: और सेट डिलीगेट भी । शायद मुझे AppDelegate.m में कुछ सेटअप याद आ रहा है? –

0

आप सुनिश्चित करें कि आपके वर्ग को लागू करता है UITableViewDelegate और UITableViewDataSource कक्षाएं हैं? अपने व्यू कंट्रोलर की घोषणा भी देखें। आपकी .h फ़ाइल इस तरह की होनी चाहिए

@interface MyClass:UIViewController <UITableViewDelegate,UITableViewDataSource> 

बाकी सब कुछ जगह में दिखता है। यदि कक्षा घोषणा यह निर्दिष्ट नहीं करती है कि यह UITableViewDelegate और DataSource लागू करता है, तो आप डेटासेट को सेट करते ही अपवाद प्राप्त करेंगे।

+0

हम्म - ऐसा लगता है कि यह हो सकता है। तब से, मैंने इंटरफेस बिल्डर को हटा दिया है और प्रोग्रामिक रूप से सभी प्रासंगिक तरीकों का निर्माण किया है। कहानी का नैतिक: काला बक्से मजेदार नहीं हैं। –

+0

यहां तक ​​कि यदि आप आईबी का उपयोग नहीं करते हैं, तो सुनिश्चित करें कि कक्षा घोषणा का उल्लेख है कि कक्षा UITableViewDelegate और UITableViewDataSource लागू करती है। – lostInTransit

24

मेरे पास एक ही त्रुटि संदेश के साथ एक समान समस्या थी। सरल समाधान टैबबार नियंत्रक में दृश्य पर क्लिक करना था (ग्रे आयताकार जो "आईबी में लोड किया गया .." कहता है) और तत्व के वर्ग को मेरे TableViewController के वर्गनाम में बदलें।

+1

जगह पर सही! धन्यवाद! –

+0

मेरे लिए भी काम किया। धन्यवाद! – lguy

+0

मेरे लिए काम करता है, कमाल !!!! : डी – tarnfeld

2

मुझे एक ही समस्या थी। 1. सुनिश्चित करें कि आपका दृश्य डेटास्रोत विधियों को लागू करता है 2. आईबी में, डेटास्रोत विधियों को लागू करने वाले वर्ग के लिए आपके दृश्य के लिए कक्षा पहचान सेट करें। 3।राइट आईबी में दृश्य पर क्लिक करें और जाँच डेटा स्रोत फ़ाइलें मालिक, नहीं देखें को झुका है Hooking up TableView in IB

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