आईओएस 6 और नए UICollectionView का उपयोग करते हुए मैं UIViewController पर 2 UICollectionViews है और एक स्टोरीबोर्ड का उपयोग कर रहा हो तो निम्न त्रुटि जब मैं UICollectionView के आसपास क्लिक करें मैं नहीं यकीन है कि क्यों कर रहा हूँ यह हो रहा है और गूगल रिटर्न 0 परिणाम इस त्रुटि के लिए ...अभिकथन विफलता - [UICollectionViewData numberOfItemsBeforeSection:]
2012-10-13 20:30:06.421 MyApp[768:907] Assertion failure in -[UICollectionViewData numberOfItemsBeforeSection:], /SourceCache/UIKit/UIKit-2372/UICollectionViewData.m:415
2012-10-13 20:30:06.427 MyApp[768:907] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for number of items before section 2147483647 when there are only 1 sections in the collection view'
मैं सब पर धारा का उपयोग नहीं करते हैं और यह सिर्फ 1 अनुभाग के लिए निर्धारित किया:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
यह तब होता है जब मैं UICollectionView क्षेत्र पर पर क्लिक करें (बेतरतीब ढंग से प्रतीत होता है) मैं कोड का एक टुकड़ा UICollectionView से तत्व हटाने के लिए:
[tilesArray removeObjectAtIndex:indexPath.row];
[self.tilesCollectionView reloadData];
[resultsArray addObject:str];
[self.resultsCollectionView reloadData];
यहाँ कैसे सरणियों UICollectionViews
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
if(collectionView.tag == 2)
return [resultsArray count];
else
return [tilesArray count];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if(collectionView.tag == 2)
{
static NSString *cellIdentifier = @"ResultCell";
ResultCell *cell = (ResultCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
cell.mainImage.image = [UIImage imageNamed:currentArtContainer.tileMainImage];
NSString *cellData = [resultsArray objectAtIndex:indexPath.row];
[cell.titleLabel setText:cellData];
return cell;
}
else
{
static NSString *cellIdentifier = @"TileCell";
TileCell *cell = (TileCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
cell.topImage.image = [UIImage imageNamed:currentArtContainer.tileTopImage];
cell.mainImage.image = [UIImage imageNamed:currentArtContainer.tileMainImage];
NSString *cellData = [tilesArray objectAtIndex:indexPath.row];
[cell.titleLabel setText:cellData];
return cell;
}
}
को झुका है
कृपया मुझे इस समस्या को हल करने में मदद। यह भी सुनिश्चित नहीं है कि मैं UICollectionView आंतरिक कोड से आने के बाद से अपवाद कैसे प्राप्त कर सकता हूं। यह भी उल्लेख करना भूल गया कि मैं UICollectionView के लिए एक कस्टम लेआउट का उपयोग कर रहा हूं लेकिन मुझे नहीं पता कि यह इस मुद्दे से संबंधित है या नहीं। आपकी मदद के लोगों के लिए फिर से
धन्यवाद!
संपादित करें: मैं के बाद सभी लेआउट पद्धतियों को बुलाया जा रहा है अपवाद हो रही है ... यहाँ मेरी कस्टम लेआउट ... मैं अभी भी यकीन है कि कैसे मेरे सारे कोशिश पकड़ ब्लॉक के बाद से यह तय करने के लिए नहीं कर रहा हूँ है जाल नहीं त्रुटि कर ...
- (void)prepareLayout
{
NSLog(@"In prepareLayout.");
[super prepareLayout];
_cellCount = [[self collectionView] numberOfItemsInSection:0];
}
- (CGSize)collectionViewContentSize
{
NSLog(@"In collectionViewContentSize.");
@try {
CGSize csize = [self collectionView].frame.size;
NSLog(@"In here.");
return csize;
}
@catch(NSException *exception)
{
NSLog(@"collectionViewContentSize %@: %@",[exception name],[exception reason]);
}
}
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
@try {
NSLog(@"In layoutAttributesForItemAtIndexPath. item %d", indexPath.row);
UICollectionViewLayoutAttributes* attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
attributes.size = CGSizeMake(ITEM_SIZE, ITEM_SIZE);
NSLog(@"firstRun %d", self.firstRun);
//NSLog(@"panStatus %@", self.panStatus);
if (self.firstRun == 0) {
CGFloat x = 0, y = 0;
CGFloat boundx = self.collectionView.frame.size.width * 0.70; // Use the whole canvas
CGFloat boundy = self.collectionView.frame.size.height * 0.70; // Use the whole canvas
while (x < 50 || x > boundx) x = arc4random() % (int)boundx + indexPath.item;
while (y < 50 || y > boundy) y = arc4random() % (int)boundy + indexPath.item;
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
if (self.positions)
dictionary = [self.positions mutableCopy];
[dictionary setObject:[NSValue valueWithCGPoint:CGPointMake(x, y)] forKey:@(indexPath.item)];
if (!self.positions)
self.positions = [[NSDictionary alloc] init];
self.positions = dictionary;
attributes.center = CGPointMake(x, y);
} else if (self.firstRun > 0) {
CGPoint point = [[self.positions objectForKey:@(indexPath.item)] CGPointValue];
attributes.center = CGPointMake(point.x, point.y);
}
NSLog(@"END layoutAttributesForItemAtIndexPath. item %d", indexPath.row);
return attributes;
}
@catch(NSException *exception)
{
NSLog(@"layoutAttributesForItemAtIndexPath %@: %@",[exception name],[exception reason]);
}
}
-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
@try {
NSLog(@"layoutAttributesForElementsInRect ...");
NSMutableArray* attributes = [NSMutableArray array];
for (NSInteger i=0 ; i < self.cellCount; i++) {
NSIndexPath* indexPath = [NSIndexPath indexPathForItem:i inSection:1];
[attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]];
}
NSLog(@"END layoutAttributesForElementsInRect ...");
return attributes;
}
@catch(NSException *exception)
{
NSLog(@"layoutAttributesForElementsInRect %@: %@",[exception name],[exception reason]);
}
}
क्या आपके द्वारा उपयोग की जाने वाली मुख्य दृश्य नियंत्रक श्रेणी UICollectionViewDataSource प्रोटोकॉल को लागू करती है? क्या आपने UICollectionView के लिए डेटा स्रोत के रूप में अपना व्यू कंट्रोलर (या जो कुछ भी) सेट किया था? – Cashew
हां। यह 2 प्रोटोकॉल लागू करता है: UICollectionViewDelegate और UICollectionViewDataSource। मैंने इसे डेटा स्रोत के साथ-साथ 2 UICollectionViews के प्रतिनिधि के रूप में सेट किया है। – user1744168