Tôi có chế độ xem bộ sưu tập nơi tôi đang sử dụng tùy chỉnh UICollectionViewFlowLayout
. Chế độ xem bộ sưu tập này có thể tải hình ảnh cục bộ hoặc qua internet. Nếu tôi tải hình ảnh cục bộ thì mọi điều hướng đều hoạt động tốt. Tuy nhiên, nếu tôi tải hình ảnh qua internet, màn hình sẽ tải đúng lần đầu tiên nhưng nếu bạn chạm vào hình ảnh và chuyển đến màn hình khác, sau đó quay lại màn hình đó (tất cả chúng đều nằm trong bộ điều khiển điều hướng) sự cố 'truy cập xấu'. Có ai biết điều gì có thể là lý do.EXC_BAD_ACCESS trên [UICollectionView setCollectionViewLayout:]
Trong viewDidLoad
[self.photosCollectionView registerNib:[UINib nibWithNibName:@"PhotoAlbumPhotosCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:kReuseIdentifierPhotosAlbumPhotosCollectionViewCell];
Trong 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];
Trong fetchImagesFromInternetAsynchronously
, tôi làm một [self.photosCollectionView reloadData]
khi hình ảnh đã được tải xuống.
Đây là stack trace:
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
Bạn có thể cung cấp thêm một số mã liên quan đến điều này không. Đặc biệt cách bạn xử lý việc tìm nạp hình ảnh từ internet. \ –
Mọi cuộc gọi đến chế độ xem bộ sưu tập phải được thực hiện trên chuỗi chính. – quellish