Running my app in a device with iOS 10 I get this error:
UICollectionView received layout attributes for a cell with an index path that does not exist
In iOS 8 and 9 works fine. I have been researching and I have found that is something related to invalidate the collection view layout. I tried to implement that solution with no success, so I would like to ask for direct help. This is my hierarchy view:
->Table view
->Each cell of table is a custom collection view [GitHub Repo][1]
->Each item of collection view has another collection view
What I have tried is to insert
[self.collectionView.collectionViewLayout invalidateLayout];
In the
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
of both collection views.
Also I have tried to invalidate layout before doing a reload data, does not work...
Could anyone give me some directions to take?
Previous answer helps, but if you use autoresizing cells, their size will be incorrect.
I solve this issues by replacing
to
The @Katrin's answer helped a lot, but I could achieve even better results by adding one more line:
I can't now say if I could reproduce crash with this line or not, but I guess there was one... So, still not a silver bullet, but something.
Calling
invalidateLayout
did not prevent the crash in my case. (It worked if the number of items in the collection view increased but not if it decreased). Context: I have a UICollectionView inside a UITableViewCell and when the table cell is re-used I reset the delegates of the collectionView. I fixed the problem not by invalidating the cache but by RECREATING the layout object any time I reset the delegate, then calling reloadData():This happened to me as well, but it was because my
UICollectionViewDataSource
changed, and I didn't call-[UICollectionView reloadData]
. In my case, I had the following data structure:I had two
UICollectionView
s: one forFoo
s and one forBar
s. In my-collectionView:didSelectItemAtIndexPath:
, I had the following:Without the
-reloadData
call, I would see the crash when I rotated the device.This happened to me when number of cells in collectionView changed. Turns out I was missing invalidateLayout after calling reloadData. After adding it, I haven't experienced any more crashes. Apple has made some modifications to collectionViews in iOS10. I guess that's the reason why we are not experiencing same problem on older versions.
Here's my final code:
It's not the best to reloadData everytime (You should use insertItems and deleteItems, and even reloadSections). But... after saying that in some cases it's a valid so, you can actually do this: