Assertion Failure in UICollectionViewData
validateLayoutInRect
on iOS7.
I am trying to delete all UICollectionView
items, one by one, using a for
loop; I posted my code below. I delete the UICollectionView
items using deleteItemsAtIndexPaths
. It's working perfectly on iOS6, but crashes in iOS7 with this exception:
Assertion Failure in UICollectionViewData validateLayoutInRect
I delete the object from collectionArray
then self.collectionView
, one by one, using indexPath
. When I delete the 4th object its raises Assertion failure
on iOS7. Here I am using performBatchUpdates
.
Please help me get the proper result in iOS7. Share proper code. Thanks in advance.
try { for (int i=count-1; i>=0; i--) { [self.collectionView performBatchUpdates:^(void){ [collectionArray removeObjectAtIndex:i]; // First delete the item from you model [self.collectionView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForRow:i inSection:0]]]; } completion:nil]; [self.collectionView reloadData]; } } @catch (NSException *exception) { } @finally { }
I actually got this crash one time not because I was returning zero for a number of sections or items in a section but because I was reusing a flow layout like this for more than 1 collection view:
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; Collection1 = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 50.0f) collectionViewLayout:flowLayout]; [Collection1 setDataSource:self]; [Collection1 setDelegate:self]; [self.view addSubview:Collection1]; Collection2 = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, self.view.frame.size.height) collectionViewLayout:flowLayout]; Collection2.backgroundColor = [UIColor whiteColor];
Instead if I create a new flow layout for each UICollectionView I avoid this crash. Hopefully that might help someone
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; Collection1 = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 50.0f) collectionViewLayout:flowLayout]; [Collection1 setDataSource:self]; [Collection1 setDelegate:self]; [self.view Collection1]; UICollectionViewFlowLayout *flowLayoutVert = [[UICollectionViewFlowLayout alloc] init]; [flowLayoutVert setScrollDirection:UICollectionViewScrollDirectionVertical]; Collection2 = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, self.view.frame.size.height) collectionViewLayout:flowLayoutVert];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With