2012-10-21 29 views
13

मैं निम्नलिखित दुर्घटना हो रही है: न आया हुआ अपवाद 'NSInternalInconsistencyException', कारण की वजह सेdequeueReusableCellWithReuseIdentifier दुर्घटना 'तरह के एक दृश्य के विपंक्ति नहीं कर सका "UICollectionElementKindCell'

समाप्त एप्लिकेशन: 'तरह के एक दृश्य के विपंक्ति नहीं कर सकता है: पहचानकर्ता सेल के साथ UICollectionElementKindCell - पहचानकर्ता के लिए एक निब या एक वर्ग रजिस्टर या एक स्टोरीबोर्ड '

में एक प्रोटोटाइप सेल कनेक्ट करना होगा मैं अपने viewDidLoad में निम्नलिखित है:

[self.collectionView registerClass:[UICollectionViewCell class] 
     forCellWithReuseIdentifier:@"Cell"]; 

और लाइन है कि दुर्घटनाओं cellForItemAtIndexPath कॉलबैक में है:

UICollectionViewCell *cell = [collectionView 
    dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 

मैं घंटे के लिए खोज कर रहा है, लेकिन किसी भी समस्या का समाधान नहीं मिल सकता है। मैंने UICollectionViewCell subclassing करने की कोशिश की है, लेकिन एक ही त्रुटि प्राप्त करें।

ब्रेकपॉइंट्स के साथ मैंने यह निर्धारित किया है कि रजिस्टर क्लास लाइन को डेक्यू से पहले निष्पादित किया जा रहा है ReusableCellWithReuseIdentifier कॉलबैक निष्पादित किया गया है।

+4

'रजिस्टर क्लास: forCellWithReuseIdentifier:' लाइन पर ब्रेकपॉइंट रखें। जब यह मारा जाता है, तो 'self.collectionView' प्रिंट करें। क्या यह शून्य है? यदि ऐसा है, तो आप आउटलेट को कनेक्ट करना भूल गए हैं (यदि एक निब का उपयोग करते हैं) या संपत्ति सेट करें (कोड का उपयोग करते हुए)। यदि यह शून्य नहीं है, तो 'dequeueReusableCellWithReuseIdentifier: forndexPath: 'line पर ब्रेकपॉइंट डालें। ब्रेकपॉइंट हिट होने पर 'संग्रह दृश्य' प्रिंट करें। क्या आपको वही पॉइंटर मिलता है जो आपको पहले ब्रेकपॉइंट से मिला है? –

+0

@robmayoff 'dequeueReusableCellWithReuseIdentifier: for इंडेक्सपाथ' से पहले आपके चरणों का पालन करें, यह एक ही सूचक है।लेकिन जब यह 'dequeueReusableCellWithReuseIdentifier: इंडेक्सपाथ' के लिए हिट करता है, तो यह उसी त्रुटि से क्रैश हो जाता है। –

उत्तर

15

मुझे यह समस्या थी क्योंकि मैं से पहले रजिस्टर क्लास पर कॉल कर रहा था, मैं अपनी तालिका दृश्य वस्तु को तुरंत चालू कर रहा था। कार्य कोड:

self.tableView = [[UITableView alloc] initWithFrame:self.view.frame]; 
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; 
[self.view addSubview:self.tableView]; 
self.tableView.delegate = self; 
self.tableView.dataSource = self; 
[self.tableView reloadData]; 
1

आप UICollectionViewController या UITableViewController में यह अनुभव करते हैं, क्या लूटने mayoff कहा के रूप में करते हैं और सुनिश्चित करें कि आपके Collection View या Table View अपने स्टोरीबोर्ड में संपत्ति को झुका है बनाने के लिए होता है।

स्टोरीबोर्ड में एक और आम गलती है जो आप सही CollectionID या CellID देने के लिए भूल गए हैं।

0

एक बार जब मैं संग्रह दृश्य कोशिकाओं पर काम कर रहा था, मैं ने लिखा है:

static NSString *identifier = @"cell "; 

ध्यान से देख रहे हैं, तो आप पहचानकर्ता स्ट्रिंग के अंत में एक अतिरिक्त स्थान देखेंगे। मेरी गलती को समझने के बाद, मुझे उम्मीद है कि यह किसी के लिए सहायक होगा।

संदर्भ:

could not dequeue a view of kind: UICollectionElementKindCell with identifier

4

इसके अलावा, एक सेल (रजिस्टर ... forCellWithReuseIdentifier) ​​और एक अनुपूरक (रजिस्टर ... forSupplementaryViewOfKind) दृश्य के बीच का अंतर भूल नहीं है।

मैं इसे सही ढंग से अनुपूरक (शीर्षलेख/पादलेख) प्रकार के साथ dequeing था, लेकिन मैं गलती से यह एक प्रकार की कोशिका के रूप में पंजीकृत। ओह।

+0

यह उत्तर स्पष्ट प्रतीत होता है लेकिन यह तय करना मुश्किल हो सकता है क्योंकि आप कल्पना करते हैं कि आपने सही विधि लिखा है। अच्छा उत्तर। –