当在两个布局之间快速切换使用 UISegmentedControl 时,我得到一个线程 1 exc_bad_access code=2 错误
Posted
技术标签:
【中文标题】当在两个布局之间快速切换使用 UISegmentedControl 时,我得到一个线程 1 exc_bad_access code=2 错误【英文标题】:When toggling using UISegmentedControl between two layouts very fast I get a thread 1 exc_bad_access code=2 error 【发布时间】:2014-04-24 15:36:47 【问题描述】:我注意到我可以通过点击我的UISegmentedControl
的一部分在两个UICollectionViewFlowLayout
之间快速切换来在我的应用中造成崩溃。
我收到的崩溃错误在这封电子邮件中:
在这种方法中:
- (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"];
我运行分析器并得到 0 个错误。 我运行了探查器并检查了内存泄漏,但没有。
我阅读了其他各种主题,但没有找到像我这样最近的主题。我看到很多人在将旧项目转换为使用 ARC 时都有经验。但是我的一直使用 ARC (XCode 5/ios7)。
知道会发生什么以及如何解决吗?
问候。
【问题讨论】:
【参考方案1】:我不清楚为什么在滚动期间更改布局会出现此错误,但您可以通过在 scrollViewWillBeginDragging: 中禁用分段控件并在 scrollViewDidEndDecelerating: 中重新启用它来修复它。确保将控制器设置为集合视图的委托。
【讨论】:
没用。我得做一些挖掘工作。对我来说没有任何意义,而且探查器中没有我们的正常情况。以上是关于当在两个布局之间快速切换使用 UISegmentedControl 时,我得到一个线程 1 exc_bad_access code=2 错误的主要内容,如果未能解决你的问题,请参考以下文章