DequeueReusableCellWithIdentifier में जोरदार विफलता: forIndexPath:


324

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

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                     forIndexPath:indexPath];
    if (cell == nil) {

        cell = 
         [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  
                                reuseIdentifier:CellIdentifier];

    }

यहाँ आउटपुट में त्रुटि है:

2012-10-04 20: 13: 05.356 रीडर [4390: c07] * में जोरदार विफलता - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012 13: 05.357 रीडर [4390: c07] * अनकैप्ड अपवाद 'NSInternalInconsistencyException' अपवाद के कारण समाप्ति ऐप, कारण: 'पहचानकर्ता सेल के साथ एक सेल को धोखा देने में असमर्थ - पहचानकर्ता के लिए एक n या या वर्ग रजिस्टर करना चाहिए या स्टोरीबोर्ड में एक प्रोटोटाइप सेल कनेक्ट करना होगा। ' * पहली फेंक कॉल स्टैक: (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935 ) libc ++ abi.dylib: अपवाद कहते हैं

और यहां त्रुटि स्क्रीन में दिखाया गया कोड है:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

कृपया सहायता कीजिए!


जवाबों:


488

आप dequeueReusableCellWithIdentifier:forIndexPath:विधि का उपयोग कर रहे हैं । उस पद्धति का प्रलेखन यह कहता है:

महत्वपूर्ण: आप का उपयोग कर एक वर्ग या निब फ़ाइल रजिस्टर करना होगा registerNib:forCellReuseIdentifier:या registerClass:forCellReuseIdentifier:इस विधि कॉल करने से पहले विधि।

आपने पुन: उपयोग करने वाले पहचानकर्ता के लिए एक निब या एक वर्ग पंजीकृत नहीं किया "Cell"

अपने कोड को देखते हुए, आपको लगता है कि nilयदि आप के पास सेल देने के लिए सेल नहीं है, तो उसे वापस करने के लिए dequeue पद्धति की अपेक्षा करें । आपको dequeueReusableCellWithIdentifier:उस व्यवहार के लिए उपयोग करने की आवश्यकता है :

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

ध्यान दें कि dequeueReusableCellWithIdentifier:और dequeueReusableCellWithIdentifier:forIndexPath:विभिन्न विधियाँ हैं। पूर्व और बाद के लिए डॉक्टर देखें ।

यदि आप यह समझना चाहते हैं कि आप कभी क्यों उपयोग करना चाहते हैं dequeueReusableCellWithIdentifier:forIndexPath:, तो इस प्रश्नोत्तर को देखें


166
हे भगवान। UITableViewController के लिए Xcode का डिफ़ॉल्ट टेम्प्लेट स्वचालित रूप से आपको dequeueReusableCellWithIdentifier: forIndexPath :? क्यों देता है तो अनपना।
spstanley

15
dequeueReusableCellWithIdentifer:forIndexPath:जब से तुम अगर सेल नहीं के बराबर है की जाँच की जरूरत नहीं है (iOS6 में प्रस्तुत), एक अच्छा सुधार है। (तो इसके UITableViewControllerसमान काम करता है UICollectionView) लेकिन, हां, यह मानते हुए कि यह परिवर्तन टेम्पलेट में टिप्पणी नहीं है और यह दावा / दुर्घटना संदेश अधिक उपयोगी नहीं है।
जेसन मूर

2
बहुत कम से कम आपको लगता है कि यह इंकोडिंग के बजाय UITableViewCell के लिए डिफ़ॉल्ट होगा। Baka।
बैडप्रेट

13
इस उत्तर की अंतिम पंक्ति सुनहरी है: मुझे एक बार से अधिक काट लिया गया है dequeueReusableCellWithIdentifier:forIndexPath:जब मुझे उपयोग करना चाहिए था dequeueReusableCellWithIdentifier:
ग्यारह

यह उत्तर एकदम सही है। मेरा एक प्रश्न है: मेरे पास अपने प्रारंभिक दृश्य नियंत्रक के रूप में एक टेबल व्यू कंट्रोलर है। DidSelectRow पर ... मैं नेविगेशन स्टैक पर एक और tableViewController धक्का दे रहा हूं। कैसे आऊं, मुझे केवल दूसरे टेबल व्यू कंट्रोलर के लिए सेल रजिस्टर करना है, न कि शुरुआती?
एरियलएसडीएस

137

मुझे लगता है कि यह त्रुटि पहचानकर्ता के लिए आपके nib या वर्ग को पंजीकृत करने के बारे में है।

ताकि आप अपने टेबल में जो कुछ भी कर रहे हैं, उसे रख सकें: cellForRowAtIndexPath फ़ंक्शन और बस नीचे दिए गए कोड को अपने viewDidLoad में जोड़ें:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

यह मेरे लिए काम किया है। आशा है कि यह मदद कर सकता है।


3
इसके साथ एक छोटा सा गोच - सुनिश्चित करें कि पहचानकर्ता का पुन: उपयोग मेल खाता है जो आपने प्रश्न में सेल के लिए अपनी स्टोरीबोर्ड सेटिंग में स्थापित किया है।
जेम्स बाउचर

बस थोड़ा अलग उपयोग के मामले में इसे जोड़ने के लिए, मैं अपने स्प्लिटव्यूकंट्रोलर के मास्टर दृश्य में एक पंक्ति का आकार बदल रहा था। यह पुन: चयन पंक्ति तर्क में था viewDidLoadऔर viewDidAppearइसे तय करने के लिए इस तर्क को आगे बढ़ा रहा था ।
क्रेग कॉन्वोर

यह सेल == nil में प्रवेश नहीं कर सका, इसलिए मेरा टेबलव्यू सेल हमेशा शून्य होता है।
सॉलिड सॉफ्ट

3
स्विफ्ट 3.0: self.tableView.register (UITableViewCell.classForCoder (), forCellReuseIdentifier: "Cell");
norbDEV

68

यद्यपि यह प्रश्न काफी पुराना है, फिर भी एक और संभावना है: यदि आप स्टोरीबोर्ड का उपयोग कर रहे हैं, तो आपको बस स्टोरीबोर्ड में CellIdentifier सेट करना होगा।

तो अगर आपका CellIdentifier "सेल" है, तो बस "पहचानकर्ता" गुण सेट करें: यहां छवि विवरण दर्ज करें

ऐसा करने के बाद अपने बिल्ड को साफ करना सुनिश्चित करें। XCode में कभी-कभी स्टोरीबोर्ड अपडेट के साथ कुछ समस्याएं होती हैं


3
तुम कमाल हो, सफाई बहुत करती है !! : डी
सैंडी

2
नोट - यदि आप "सेल" के अलावा एक पहचानकर्ता का उपयोग करते हैं, तो आपको निम्न पंक्ति में इस पहचानकर्ता का उपयोग करने के लिए अपना सेलफ़ोररॉवटाइंडएक्सपैथ विधि बदलने की आवश्यकता होगी: स्थैतिक एनएसएसटीरिंग * सेलआईडेंटिफायर = @ "मायसेलिडेंटिफायर";
गमोज़्ज़ी

5
इसके लिए एक महत्वपूर्ण अतिरिक्त: तालिका दृश्य में "डायनामिक प्रोटोटाइप" के लिए "कंटेंट" विशेषता होनी चाहिए, न कि "स्टेटिक सेल"
टेड एवरी

इस उत्तर को अधिक आने की जरूरत है। बहुत मददगार
सुक्खा उदुगमसूरिया

Identifierसंपत्ति को अपडेट करने के बाद सफाई का निर्माण आवश्यक था । धन्यवाद!
Crashalot

59

मैं एक ही समस्या के साथ बदल रहा था

static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    }

हल किया


धन्यवाद। इसने मुझे सिरदर्द से बचा लिया। =)
रॉबर्ट

3
टिप: यदि आप एक (id) dequeueReusableCellWithIdentifier: forIndexPath का उपयोग करते हैं: यदि सेल शून्य है तो सत्यापित करने की आवश्यकता नहीं है। (IOS6>)
seufagner

बस मुझे एक सिरदर्द बचा लिया। =)
Abo3atef

26

समस्या सबसे अधिक संभावना है क्योंकि आप UITableViewCellस्टोरीबोर्ड में कस्टम को कॉन्फ़िगर करते हैं लेकिन आप स्टोरीबोर्ड का उपयोग नहीं करते हैं UITableViewControllerजो कि आपके द्वारा उपयोग किए जाने वाले इंस्टेंट को बताता है UITableViewCell। उदाहरण के लिए, MainStoryboard में, आप एक है UITableViewControllerउपवर्ग कहा जाता है MyTableViewControllerऔर एक कस्टम गतिशील है UITableViewCellकहा जाता MyTableViewCellपहचानकर्ता आईडी "MyCell" के साथ।

यदि आप UITableViewControllerइस तरह अपना रिवाज बनाते हैं :

 MyTableViewController *myTableViewController = [[MyTableViewController alloc] init];

यह स्वचालित रूप से आपके लिए आपके कस्टम टेबलव्यू को पंजीकृत नहीं करेगा। आपको इसे मैन्युअल रूप से पंजीकृत करना होगा।

लेकिन अगर आप स्टोरीबोर्ड का उपयोग MyTableViewControllerइस तरह से करते हैं, तो:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyTableViewController *myTableViewController = [storyboard  instantiateViewControllerWithIdentifier:@"MyTableViewController"];

अच्छी बात होती है! UITableViewControllerस्वचालित रूप से आपके कस्टम टेबलव्यू सेल को पंजीकृत करेगा जिसे आप स्टोरीबोर्ड में परिभाषित करते हैं।

अपने प्रतिनिधि विधि "सेलफ़ोररॉइट इंडेक्सपैथ" में, आप इस तरह से टेबल व्यू सेल बना सकते हैं:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

//Configure your cell here ...

return cell;
}

यदि पुन: प्रयोज्य सेल उपलब्ध नहीं है, तो dequeueReusableCellWithIdentifier आपके लिए नई सेल बनाएगा।

फिर तुम हो गए!


टिप जो कि instantiateViewControllerWithIdentifierमेरे दृश्य का उपयोग कर रही है, मेरे दिन को नियंत्रित करता है!
लेई जांग

मेरा दिन बचाया: प्रोटोटाइप कोशिकाओं पड़ोसी कुलपति में एक मेज के साथ थे
एंटोन ट्रोपास्को

मेरे मामले में यह वाजिब कारण है।
नोरा अल्नाशवान

19

मैं सिर्फ इतना जोड़ूंगा कि Xcode 4.5dequeueReusableCellWithIdentifier:forIndexPath:
में इसके डिफ़ॉल्ट टेम्प्लेट कोड में नया शामिल है - पुराने dequeueReusableCellWithIdentifier:तरीके की उम्मीद करने वाले डेवलपर्स के लिए एक संभावित गोचा ।


मुझे डंक मार दिया! अब मैं बेहतर जानता हूँ। ;)
स्पिल्टले

18

अपने स्टोरीबोर्ड में आपको अपने प्रोटोटाइप सेल के 'आइडेंटिफायर' को अपने सेलर्यूइजेंटिफायर "सेल" के समान होना चाहिए। तब आपको वह संदेश नहीं मिलेगा या उस रजिस्टर को कॉल करने की आवश्यकता होगी: फ़ंक्शन।


2
पकड़ लिया! जहां '100 upvotes' बटन है। यही वास्तविक समाधान है।
Jojo.Lechelt

आपको लगता होगा कि स्टोरीबोर्ड में एक नया टेबल व्यू जोड़ने से आपके लिए एक डिफ़ॉल्ट पहचानकर्ता - 'सेल' उपलब्ध होगा। यह बहुत आसानी से अनदेखी है, खासकर यदि आप टेबल व्यू में तथाकथित 'फ्री कोड' का उपयोग कर रहे हैं: cellForRowAtIndexPath!
ushika

18

स्विफ्ट 2.0 समाधान:

आपको अपने विशेषता निरीक्षक में जाने और अपनी कोशिकाओं के लिए एक नाम जोड़ने की आवश्यकता है पहचानकर्ता:

यहां छवि विवरण दर्ज करें

फिर आपको इस तरह से अपने पहचान पत्र के साथ अपना पहचान पत्र बनाने की आवश्यकता है:

let cell2 = tableView.dequeueReusableCellWithIdentifier("ButtonCell", forIndexPath: indexPath) as! ButtonCell

वैकल्पिक रूप से

यदि आप एक निब के साथ काम कर रहे हैं, तो आपको अपनी कक्षा को अपने सेलफ़ोररौट में पंजीकृत करने की आवश्यकता हो सकती है।

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {       

    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwitchCell")

    // included for context            
    let cell = tableView.dequeueReusableCellWithIdentifier("SwitchCell", forIndexPath:indexPath) as! SwitchCell

    //... continue    
}

सेब का यूआईटेबल व्यू क्लास संदर्भ कहता है:

किसी भी सेल को हटाने से पहले, इस विधि या रजिस्टर को कॉल करें: रजिस्टर: forCellReuseIdentifier: टेबल व्यू को नए सेल बनाने का तरीका बताने की विधि। यदि निर्दिष्ट प्रकार का एक सेल वर्तमान में एक पुन: उपयोग कतार में नहीं है, तो तालिका दृश्य स्वचालित रूप से एक नया सेल ऑब्जेक्ट बनाने के लिए प्रदान की गई जानकारी का उपयोग करता है।

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

यहाँ कोड स्विफ्ट 2.0 फ्रेमवर्क से कोड है:

// Beginning in iOS 6, clients can register a nib or class for each cell.
// If all reuse identifiers are registered, use the newer -dequeueReusableCellWithIdentifier:forIndexPath: to guarantee that a cell instance is returned.
// Instances returned from the new dequeue method will also be properly sized when they are returned.

@available(iOS 5.0, *)
func registerNib(nib: UINib?, forCellReuseIdentifier identifier: String)

@available(iOS 6.0, *)
func registerClass(cellClass: AnyClass?, forCellReuseIdentifier identifier: String)

मुझे समझ नहीं आ रहा है कि कहाँ SwitchCell.selfसे आ रहा है?
गर्ट कुयकेन्स

@GertCuykens SwitchCell मेरा कस्टम UITableViewCell है
Dan Beaulieu

1
मैं अभी अपने मैक से दूर हूं, लेकिन घर पहुंचने पर मैं इसे निश्चित रूप से अपडेट कर सकता हूं।
डैन ब्यूलियू

1
UITableViewCell.selfमेरे साथ काम करने के लिए इसे बदलने के लिए लगता है। हो सकता है कि उत्तर में एक नोट जोड़ें
गर्ट क्यूकेंस

@GertCuykens कि बाहर इशारा करने के लिए धन्यवाद, मैं बदल दिया है।
Dan Beaulieu

3

यदि आप कस्टम स्टेटिक सेल के साथ जा रहे हैं तो इस विधि पर टिप्पणी करें:

//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//    static NSString *CellIdentifier = @"notificationCell";
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//    return cell;
//}

और स्टोरीबोर्ड में "अटेंडेस इंस्पेक्टर" में कोशिकाओं को एक पहचानकर्ता दें ।


3

मैं आपको उद्देश्य सी और स्विफ्ट दोनों में उत्तर देता हूं। इससे पहले कि मैं कहना चाहता हूं

यदि हम इसका उपयोग करते हैं dequeueReusableCellWithIdentifier:forIndexPath:, तो हमें registerNib का उपयोग करके एक वर्ग या नायब फ़ाइल को पंजीकृत करना होगा: forCellReuseIdentifier: या registerClass: forCellReuseIdentifier: इस विधि को Apple Docnetnetation कहते हैं।

तो हम जोड़ते हैं registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier:

एक बार जब हम निर्दिष्ट पहचानकर्ता के लिए एक वर्ग पंजीकृत करते हैं और एक नया सेल बनाया जाना चाहिए, तो यह विधि सेल को उसके initWithStyle: reuseIdentifier: पद्धति से कॉल करके आरंभ करती है। निब आधारित कोशिकाओं के लिए, यह विधि प्रदान की गई निब फ़ाइल से सेल ऑब्जेक्ट को लोड करती है। यदि कोई मौजूदा सेल पुन: उपयोग के लिए उपलब्ध था, तो यह विधि इसके बजाय सेल की तैयारीफोररियूस विधि को कॉल करती है।

viewDidLoad विधि में हमें सेल को पंजीकृत करना चाहिए

उद्देश्य सी

विकल्प 1:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];

विकल्प 2:

[self.tableView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:@"cell"];

उपरोक्त कोड nibWithNibName:@"CustomCell"में मेरे nib नाम CustomCell के बजाय अपना नाम दें

स्विफ्ट

विकल्प 1:

tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

विकल्प 2:

tableView.registerNib(UINib(nibName: "NameInput", bundle: nil), forCellReuseIdentifier: "Cell") 

उपरोक्त कोड में nibName:"NameInput"अपना नाम दें


3

स्विफ्ट 3.0 के साथ काम करना:

override func viewDidLoad() {
super.viewDidLoad()

self.myList.register(UINib(nibName: "MyTableViewCell", bundle: nil), forCellReuseIdentifier: "Cell")
}



public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = myList.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as! MyTableViewCell

return cell
}

2

मैंने कल रात काम करते हुए घंटों बिताए कि मेरी प्रोग्रामेटिकली उत्पन्न तालिका [myTable setDataSource: self] पर क्रैश क्यों हुई; यह ठीक था कि टिप्पणी करना और एक खाली तालिका को पॉप अप करना, लेकिन हर बार जब मैंने डेटासोर्स तक पहुंचने की कोशिश की तो दुर्घटनाग्रस्त हो गया;

मेरे पास h फाइल में डेलिगेशन सेट था: @interface myViewController: UIViewController

मेरे कार्यान्वयन में डेटा स्रोत कोड था और अभी भी बूम!, हर बार दुर्घटना! "Xxd" (nr 9) के लिए धन्यवाद: कोड की उस पंक्ति को जोड़कर इसे मेरे लिए हल कर दिया! वास्तव में मैं IBAction बटन से एक तालिका लॉन्च कर रहा हूं, इसलिए यहां मेरा पूरा कोड है:

    - (IBAction)tapButton:(id)sender {

    UIViewController* popoverContent = [[UIViewController alloc]init];

    UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
    popoverView.backgroundColor = [UIColor greenColor];
    popoverContent.view = popoverView;

    //Add the table
    UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)         style:UITableViewStylePlain];

   // NEXT THE LINE THAT SAVED MY SANITY Without it the program built OK, but crashed when      tapping the button!

    [table registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    table.delegate=self;
    [table setDataSource:self];
    [popoverView addSubview:table];
    popoverContent.contentSizeForViewInPopover =
    CGSizeMake(200, 300);

    //create a popover controller
    popoverController3 = [[UIPopoverController alloc]
                          initWithContentViewController:popoverContent];
    CGRect popRect = CGRectMake(self.tapButton.frame.origin.x,
                                self.tapButton.frame.origin.y,
                                self.tapButton.frame.size.width,
                                self.tapButton.frame.size.height);


    [popoverController3 presentPopoverFromRect:popRect inView:self.view   permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];



   }


   #Table view data source in same m file

   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
   {
    NSLog(@"Sections in table");
    // Return the number of sections.
    return 1;
   }

   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
  {
    NSLog(@"Rows in table");

    // Return the number of rows in the section.
    return myArray.count;
   }

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

    NSString *myValue;

    //This is just some test array I created:
    myValue=[myArray objectAtIndex:indexPath.row];

    cell.textLabel.text=myValue;
    UIFont *myFont = [ UIFont fontWithName: @"Arial" size: 12.0 ];
    cell.textLabel.font  = myFont;

    return cell;
   }

वैसे: बटन को IBAction और IBOutlet के रूप में जोड़ा जाना चाहिए, यदि आप इसके लिए पॉपओवर को लंगर डालना चाहते हैं।

UIPopoverController * popoverController3 H फ़ाइल में सीधे {@ के बीच @interface के बाद घोषित किया गया है


2

FWIW, मुझे यह त्रुटि तब मिली जब मैं स्टोरीबोर्ड में सेल पहचानकर्ता सेट करना भूल गया। यदि यह आपका मुद्दा है तो स्टोरीबोर्ड में तालिका दृश्य सेल पर क्लिक करें और विशेषता संपादक में सेल पहचानकर्ता सेट करें। सुनिश्चित करें कि आपके द्वारा यहां निर्धारित सेल पहचानकर्ता समान है

static NSString *CellIdentifier = @"YourCellIdenifier";

2

मेरे पास एक ही मुद्दा था, एक ही त्रुटि थी और मेरे लिए यह इस तरह काम करता था:

[self.tableView registerNib:[UINib nibWithNibName:CELL_NIB_HERE bundle: nil] forCellReuseIdentifier:CELL_IDENTIFIER_HERE];

शायद यह किसी और के लिए उपयोगी होगा।


2

मैंने स्टोरीबोर्ड में सब कुछ सही ढंग से सेटअप किया और एक साफ निर्माण किया, लेकिन त्रुटि मिलती रही " पहचानकर्ता के लिए एक निब या एक वर्ग पंजीकृत करना चाहिए या स्टोरीबोर्ड में एक प्रोटोटाइप सेल कनेक्ट करना चाहिए "

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

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


1

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


धन्यवाद! यह वास्तव में मेरी समस्या थी।
यशायाह टर्नर

1

बस जवाब का एक पूरक: एक समय हो सकता है कि आप सभी चीजों को सही तरीके से सेट करें, लेकिन आप गलती से आप में कुछ अन्य यूआई जोड़ सकते हैं .xib, जैसे UIButton: यहां छवि विवरण दर्ज करें बस अतिरिक्त यूआई को हटा दें, यह काम करता है।


1

सुनिश्चित करें कि किसी स्टोरीबोर्ड में सेल का पहचानकर्ता == पहचानकर्ता, दोनों नाम समान हैं। आशा है कि यह आपके लिए काम करेगा


0

मेरे मामले में, दुर्घटना तब हुई जब मैंने फोन कियाdeselectRowAtIndexPath:

लाइन थी [tableView deselectRowAtIndexPath:indexPath animated:YES];

यह मेरी समस्या को पूरा करने के लिए बदल रहा है [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; !

आशा है कि यह किसी को भी मदद करता है


0

स्विफ्ट में इस समस्या को अपने में निम्नलिखित कोड जोड़कर हल किया जा सकता है

viewDidLoad

तरीका।

tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")

-1

इस त्रुटि के कारण bc सेल री-यूज़ आइडेंटिफायर गलत हो गया था - एक धोखेबाज़ गलती लेकिन ऐसा होता है: 1. MURE SURE सेल री-यूज़ आइडेनफायर में कोई गलत वर्तनी या लापता अक्षर नहीं है। 2. एक ही लाइन के साथ, कैपिटलाइज़ेशन काउंट को न भूलें। 3. शून्य "O" नहीं हैं (ओह)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.