当在两个布局之间使用UISegmentedControl切换非常快时,我得到一个线程1 exc_bad_access code = 2 error

时间:2014-04-24 15:36:47

标签: ios objective-c cocoa-touch uiview uisegmentedcontrol

我注意到我可以通过点击UICollectionViewFlowLayout的一部分来快速切换两个UISegmentedControl来在我的应用中制造崩溃。

我收到的崩溃错误在此电子邮件中:

enter image description here

在此方法中:

- (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)。

知道可能会发生什么以及如何解决它?

问候。

1 个答案:

答案 0 :(得分:0)

我不清楚为什么如果在滚动期间更改布局会出现此错误,但您可以通过在scrollViewWillBeginDragging中禁用分段控件来修复它,并在scrollViewDidEndDecelerating中重新启用它:。确保将控制器设置为集合视图'委派。