2010-02-08 15 views
43

मैं वास्तव में मेरे त्रुटि देख न:UITableView डेटा स्रोत tableView से एक सेल लौटाएगा: cellForRowAtIndexPath: अपवाद

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    FriendTableViewCell *cell = (FriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[FriendTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     [[NSBundle mainBundle] loadNibNamed:@"FriendTableViewCell" owner:self options:nil]; 
     cell = friendCell; 
    } 
    cell.lblNickname.text = @"Tester"; 
    return cell; 
} 

क्या मैं गलत कर रहा हूँ? मैंने दो बार जांच की .. लेकिन त्रुटि नहीं दिखाई दे रही है।

आपकी मदद के लिए धन्यवाद!

उत्तर

66

आप दोस्त को वापस कर रहे हैं, और यह बहुत संभावना है।

आपका कोड ठीक दिखता है, इसलिए सुनिश्चित करें कि आपके पास इंटरफ़ेस बिल्डर फ़ाइल सही है। FriendTableViewCell.xib में, सुनिश्चित करें कि फ़ाइल का स्वामी आपका टेबल व्यू कंट्रोलर है और आपने सेल को ठीक से सेल को आउटलेट के रूप में सेट किया है (जिसे मैं मानता हूं कि UITableViewCell है)।

+1

धन्यवाद, चेकइन के बाद मुझे फिर से इंटरफेस बिल्डर में एक लापता आउटलेट कनेक्शन मिला! – phx

+1

धन्यवाद, आपका उत्तर सिर्फ वही है जो मुझे चाहिए था। मैंने दृश्य नियंत्रक वर्ग का नाम बदल दिया, इसके बारे में मेरी सोच के बिना आईबी से कनेक्शन तोड़ दिया। कोई और नाम बदलना नहीं क्योंकि मुझे उन्हें पसंद नहीं है! –

+0

ग्रेट उत्तर, आमतौर पर समस्या एक शून्य सेल लौटने के बारे में कुछ है! – Fattie

2

आप FriendTableViewCell बना रहे हैं और फिर इसे अनदेखा कर रहे हैं और इसे FriendCell नामक एक इंस्टेंस वैरिएबल (अनुमानतः) के बराबर सेट कर रहे हैं।

मुझे लगता है कि आप loadNibNamed विधि को कॉल करते समय FriendCell को सेट करने की अपेक्षा करते हैं। यह स्पष्ट रूप से सेट नहीं किया जा रहा है।

तो आपको इस कोड के साथ दो समस्याएं मिली हैं। सबसे पहले, दो बार सेल आवंटित न करें।

cell = [[[FriendTableViewCell .... 
[[NSBundle mainBundle ..... 
cell = friendCell; 

जाहिर है, एक नया सेल के निर्माण और सेल को यह बताए बेकार यदि आप इसे सेल करने के लिए काम करने के लिए दूसरी कॉल के साथ अधिलेखित कर रहे हैं है।

दूसरा, दोस्तसेल शायद शून्य है। सुनिश्चित करें कि एनआईबी सही तरीके से स्थापित है और सही जगहों पर इंगित आउटलेट हैं।

+0

आपकी मदद के लिए धन्यवाद! दोस्तसेल मेरा आउटलेट है, तो सही तरीके से सेटअप कैसे करें? – phx

0

यहाँ देखो: Loading TableViewCell from NIB

यह इस सटीक विषय के लिए एप्पल के दस्तावेज है।

//This is assuming you have tvCell in your .h file as a property and IBOutlet 
//like so: 
TableViewController.h 
@property(nonatomic,retain) IBOutlet UITableViewCell *tvCell; 
//Data Source Method... 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

if (cell == nil) { 

    [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil]; 

    cell = tvCell; 

    self.tvCell = nil; 

loadNibNamed का उपयोग करें: मालिक: विकल्पों को एक निब में सेल लोड करने के लिए विधि। सेल उदाहरण को अपने निब ऑब्जेक्ट पर सेट करें, फिर nib ऑब्जेक्ट को शून्य पर सेट करें।

बाकी दस्तावेज़ों को पढ़ें जिन्हें मैंने लिंक किया है, यह जानने के लिए कि आपके सेल के अंदर सबव्यूव्यू कैसे पहुंचे।

2

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

33

मेरे लिए, यह ऐसा करने काम:

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

अद्यतन
प्लेस निम्न विधि में उपरोक्त कोड:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

बस इसे पहले डाल संपादन tableViewCell

0

सेट करना न भूलें इंटरफ़ेस बिल्डर में।

0

यह प्रयोग करें,

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID]; 

मैं सिर्फ यह लाइनों के साथ कुछ और घंटे बचा लिया।

0

अपने प्रोटोटाइप सेल मैचों जो कुछ भी आप CellIdentifier बुलाया

static NSString *CellIdentifier = @"Cell"; 
1

मैंने पाया के लिए अपने निब/स्टोरीबोर्ड फ़ाइल में सुनिश्चित करें कि आपके पुन: उपयोग पहचानकर्ता बनाओ इस समस्या के लिए आया था कि जब मेरे तालिका दृश्य initialising से पहले अपने UITableViewCell बनाने का प्रयास कर:

तालिका दृश्य बनाने से पहले कक्षा को पंजीकृत करने से त्रुटि उत्पन्न होगी, त्रुटि को ठीक करने के बाद इसे रखेगा।

[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:bCellIdentifier]; 

tableView = [[UITableView alloc] initWithFrame:CGRectZero]; 
tableView.delegate = self; 
tableView.dataSource = self; 

[self addSubview:tableView]; 

tableView.keepInsets.equal = KeepRequired(0); 
+0

मेरे मामले में मैं तालिका UITableViewCell रजिस्टर से पहले डेटा लोड करने के लिए फ़ंक्शन को कॉल करता हूं, क्योंकि आपका उत्तर इस समस्या को दूर करने में मेरी सहायता करता है – iphonemaclover

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