我有一个集合视图,我在使用自定义UICollectionViewFlowLayout.此集合视图可以在本地或通过Internet加载图像.如果我在本地加载图像,每个导航都很有效.然而,如果我通过互联网加载图像,屏幕第一次正确加载,但如果你点击图像并转到另一个屏幕,然后从该屏幕返回(它们都在导航控制器中),有一个’糟糕的访问’崩溃.
有谁知道可能是什么原因.
有谁知道可能是什么原因.
在viewDidLoad中
[self.photosCollectionView registerNib:[UINib nibWithNibName:@"PhotoAlbumPhotosCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:kReuseIdentifierPhotosAlbumPhotosCollectionViewCell];
在viewWillAppear中
[self fetchImagesFromInternetAsynchronously]; self.photosCollectionView.dataSource = self; self.photosCollectionView.delegate = self; self.photosCollectionViewFlowLayout = [UICollectionViewFlowLayout new]; self.photosCollectionViewFlowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; self.photosCollectionViewFlowLayout.minimumInteritemSpacing = 2.0f; self.photosCollectionViewFlowLayout.minimumLineSpacing = 2.0f; CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width; CGFloat cellDimension = (screenWidth - 2*self.photosCollectionViewTrailingSpaceConstraint.constant - 3*self.photosCollectionViewFlowLayout.minimumInteritemSpacing)/4 - 1.0; CGSize cellSize = CGSizeMake(cellDimension,cellDimension); [self.photosCollectionViewFlowLayout setItemSize:cellSize]; [self.photosCollectionView setCollectionViewLayout:self.photosCollectionViewFlowLayout];
在fetchImagesFromInternet异步中,我在获取图像后执行[self.photosCollectionView reloadData].
这是堆栈跟踪:
stop reason = EXC_BAD_ACCESS (code=1,address=0x8) frame #0: 0x0000000112da0e09 UIKit`-[UICollectionViewData layoutAttributesForItemAtIndexPath:] + 248 frame #1: 0x0000000112d4f2d3 UIKit`-[UICollectionView _setCollectionViewLayout:animated:isInteractive:completion:] + 1893 frame #2: 0x0000000112d4e86b UIKit`-[UICollectionView setCollectionViewLayout:] + 318 * frame #3: 0x000000010be6b0aa app`-[PhotoAlbumPhotosPickerViewController viewWillAppear:](self=0x00007fd5830d3e00,_cmd="viewWillAppear:",animated=YES) + 1514 at PhotoAlbumPhotosPickerViewController.m:90 frame #4: 0x000000010eec85fd UIKit`-[UIViewController _setViewAppearState:isAnimating:] + 710 frame #5: 0x000000010eec8c98 UIKit`-[UIViewController __viewWillAppear:] + 149 frame #6: 0x000000010eef8a37 UIKit`-[UINavigationController _startCustomTransition:] + 1203 frame #7: 0x000000010ef08cdb UIKit`-[UINavigationController _startDeferredTransitionIfNeeded:] + 712 frame #8: 0x000000010ef09cea UIKit`-[UINavigationController __viewWillLayoutSubviews] + 57 frame #9: 0x000000010f0afc85 UIKit`-[UILayoutContainerView layoutSubviews] + 248 frame #10: 0x000000010ede4e40 UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710
解决方法
难以置信!
这是最终奏效的.如果我在集合视图中添加了页脚视图,这甚至会发生类似的崩溃.
更换
self.photosCollectionViewFlowLayout = [UICollectionViewFlowLayout new];
同
self.photosCollectionViewFlowLayout = (UICollectionViewFlowLayout*)self.photosCollectionView.collectionViewLayout;
或者在viewWillDisappear中添加它(但是这并没有摆脱页脚视图崩溃,所以最好使用第一种方法.
self.photosCollectionView.delegate = nil; self.photosCollectionView.dataSource = nil;