【问题标题】:Getting Bad Access Error获取错误的访问错误
【发布时间】:2013-08-28 12:07:07
【问题描述】:

我在我的应用程序中使用CAShapeLayerUIBezierPath。我有一个重新加载按钮。当我多次重新加载视图时,它给了我一个EXC_BAD_ACCESS 错误。这是我的代码:

self.layer.sublayers = nil;
NSInteger numOfDays = [self differenceBetweenTwoDatesFromDate:startDate toDate:endDate];
CGFloat widthOfComponent = numOfDays * dayWidth;
if (self.frame.size.width > widthOfComponent) {
    DLog(@"%@",NSStringFromCGRect(self.frame))
    widthOfComponent = self.frame.size.width - 2 * DIFFERENCE_FROM_ORIGIN;
    dayWidth = widthOfComponent/numOfDays;
}
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, widthOfComponent, self.frame.size.height);

[self reloadData];

[super layoutSubviews];

当我将新帧传递给 self.frame 时出现此错误。

【问题讨论】:

  • self.frame 即将发布..
  • 但这怎么可能?
  • 什么是self?不,self.frame 不会被释放。
  • self 是我的 UIView 实例,我正在从视图控制器重新加载。
  • 能否分享一下崩溃日志?它在哪一行崩溃了?

标签: ios exc-bad-access


【解决方案1】:

这是由self.layer.sublayers = nil 引起的。不加选择地删除所有子层会在 iOS 7 中导致严重的崩溃,这可能会在程序执行的后期发生。我已经使用rootLayer.sublayers = nil[rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)] 彻底测试了这一点。一定有一个系统创建的层搞砸了。

您必须保留自己的图层数组并自己删除它们:

[myArrayOfLayersIAdded makeObjectsPerformSelector:@selector(removeFromSuperlayer)];

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多