简体   繁体   English

获取错误的访问错误

[英]Getting Bad Access Error

I am using CAShapeLayer and UIBezierPath in my application. 我在我的应用程序中使用CAShapeLayerUIBezierPath 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM