【问题标题】:EXC_BAD_ACCESS on setCollectionViewLayoutsetCollectionViewLayout 上的 EXC_BAD_ACCESS
【发布时间】:2012-11-01 16:56:34
【问题描述】:

如果我在方向更改期间更改 UICollectionView 的布局,我会在几轮旋转后得到 EXC_BAD_ACCESS

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    UICollectionViewLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    self.myCollectionView.collectionViewLayout = layout; // This causes EXC_BAD_ACCESS after a few rotations
}

这是UICollectionView 错误吗?还是我做错了什么?如果是错误,有没有办法在方向更改期间更改整个布局?

我注意到answer 中提到了同样的问题。使用 NSZombies 进行调试不会产生额外的信息。

【问题讨论】:

  • 有没有想过这个问题?我在使用[collectionView setCollectionViewLayout:layout animated:animated] 更改布局时遇到了类似的问题。回溯看起来像:* thread #1: tid = 0x1c03, 0x01780098 libobjc.A.dylib`objc_msgSend + 12, stop reason = EXC_BAD_ACCESS (code=1, address=0xc0000000) frame #0: 0x01780098 libobjc.A.dylib`objc_msgSend + 12 frame #1: 0x008f6ed5 UIKit`-[UICollectionViewData _setLayoutAttributes:atGlobalItemIndex:] + 62 frame #2: 0x008f80f6 UIKit`__45-[UICollectionViewData validateLayoutInRect:]_block_invoke_0 + 1004
  • 可能与stackoverflow.com/questions/15786084/…有关,也仍然开放。
  • 有没有使用这种布局的 UIDynamicAnimator 呢? (编辑:如果这是 10 个月前发布的,我想不会。)
  • 完全相同的问题和回溯。旋转设备时我正在更改布局。但就我而言,即使它是我的应用用户报告的首要崩溃,我也无法重现。
  • 我仍然有相同的堆栈跟踪。我仍然无法解决这个问题。有人解决了吗?

标签: iphone ios exc-bad-access uicollectionview


【解决方案1】:

不太确定它有什么事情要做,但Release Notes for iOS 6 说:

willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:,和 didRotateFromInterfaceOrientation: 方法不再被调用 对自身进行全屏展示的视图控制器——对于 例如,presentViewController:animated:completion:

您应该确保您的应用没有使用这些方法来管理任何子视图的布局。相反,他们应该使用视图 控制器的viewWillLayoutSubviews 方法并使用调整布局 视图的边界矩形。

由于您使用的是UICollectionView 可能您正在使用此方法更改其布局。

【讨论】:

  • 我认为情况并非如此,因为有问题的视图控制器是主视图控制器,而不是通过 presentViewController:animated:completion: 呈现。
猜你喜欢
  • 1970-01-01
  • 2016-06-23
  • 2015-03-13
  • 2012-03-05
  • 2021-04-02
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多