我注意到我可以通过点击UICollectionViewFlowLayout
的一部分来快速切换两个UISegmentedControl
来在我的应用中制造崩溃。
我收到的崩溃错误在此电子邮件中:
在此方法中:
- (void)displayTypeSegmentSelected
{
_selectedDisplayTypeIndex = [_displayTypeControl selectedSegmentIndex];
if (_selectedDisplayTypeIndex == 0) {
NSLog(@"Single file item view selected");
[_collectionView setCollectionViewLayout:_flowLayout2 animated:NO];
[_collectionView reloadItemsAtIndexPaths:[_collectionView indexPathsForVisibleItems]];
} else if (_selectedDisplayTypeIndex == 1) {
NSLog(@"Grid style view selected");
[_collectionView setCollectionViewLayout:_flowLayout animated:NO];
[_collectionView reloadItemsAtIndexPaths:[_collectionView indexPathsForVisibleItems]];
}
}
属性:
@property (strong, nonatomic) IBOutlet UICollectionView *collectionView;
@property (strong, nonatomic) IBOutlet UICollectionViewFlowLayout *flowLayout;
viewDidLoad中:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"view did load");
_thisController = self;
_superView = [_thisController view];
_collectionView = [_thisController collectionView];
_navigationBar = [[_thisController navigationController] navigationBar];
_selectedDisplayTypeIndex = 1; // default display type selected to grid style
// Create flow layout
_flowLayout2 = [[UICollectionViewFlowLayout alloc] init];
// Set up margins, sizes etc
[_flowLayout2 setHeaderReferenceSize:CGSizeMake(50,93)];
[_flowLayout2 setItemSize:CGSizeMake(300, 500)];
[_flowLayout2 setMinimumLineSpacing:0];
[_flowLayout2 setMinimumInteritemSpacing:0];
[_flowLayout2 setSectionInset:UIEdgeInsetsMake(1, 0, 40, 0)];
[_flowLayout2 setScrollDirection:UICollectionViewScrollDirectionVertical];
// Grab cell nib file and give a reuse identifier
[_collectionView registerNib:[UINib nibWithNibName:@"VAGGarmentCell2" bundle:nil] forCellWithReuseIdentifier:@"Cell2"];
}
我运行了Analyzer并得到了0个错误。 我运行了探查器并检查了内存泄漏,但没有。
我读了各种其他线程,发现没有最新的线程。在转换旧项目与ARC合作时,我见过很多人。然而,我一直使用ARC(XCode 5 / iOS7)。
知道可能会发生什么以及如何解决它?
问候。
答案 0 :(得分:0)
我不清楚为什么如果在滚动期间更改布局会出现此错误,但您可以通过在scrollViewWillBeginDragging中禁用分段控件来修复它,并在scrollViewDidEndDecelerating中重新启用它:。确保将控制器设置为集合视图'委派。