当在两个布局之间快速切换使用 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 错误的主要内容,如果未能解决你的问题,请参考以下文章

在iOS 5中使用UISegmentedControl切换视图控制器

当在两个不同的vbo之间进行插值时,网格面向迷失方向

如何在回调时在 Kivy 布局之间切换?

在具有自动布局的 UIView 之间切换

如何在 QPushbutton 的两个功能之间来回切换?

使用 javascript、jquery、bootstrap 在网页布局(手机/笔记本电脑)之间切换