[英]Getting Bad Access Error
I am using CAShapeLayer
and UIBezierPath
in my application. 我在我的应用程序中使用
CAShapeLayer
和UIBezierPath
。 I have a reload button. 我有一个重新加载按钮。 When I am reloading my view several times, it is giving me an
EXC_BAD_ACCESS
error. 当我多次重新加载视图时,它给我一个
EXC_BAD_ACCESS
错误。 Here is my code : 这是我的代码:
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];
I am getting this error when I am passing the new frame to self.frame
. 我将新框架传递给
self.frame
时遇到此错误。
It's caused by self.layer.sublayers = nil
. 这是由
self.layer.sublayers = nil
引起的。 Indiscriminately removing all sublayers causes nasty crashes in iOS 7, which can occur much later in the program's execution. 不加选择地删除所有子层会在iOS 7中导致严重崩溃,该崩溃可能在程序执行的更晚时间发生。 I have tested this thoroughly using both
rootLayer.sublayers = nil
and [rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
. 我已经使用
rootLayer.sublayers = nil
和[rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]
进行了彻底的测试。 There must be a system-created layer that's getting messed up. 必须有一个系统创建的层,该层已变得混乱。
You have to keep your own array of layers and remove them yourself: 您必须保留自己的图层阵列并自己删除它们:
[myArrayOfLayersIAdded makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.