1

私は自分のアプリケーションでCAShapeLayerとを使用UIBezierPathしています。リロードボタンがあります。ビューを数回リロードすると、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ます。

4

1 に答える 1

0

が原因self.layer.sublayers = nilです。すべてのサブレイヤーを無差別に削除すると、iOS 7 で厄介なクラッシュが発生します。これは、プログラムの実行のずっと後の段階で発生する可能性があります。と の両方rootLayer.sublayers = nilを使用して、これを徹底的にテストしました[rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]。システムが作成したレイヤーが台無しになっているはずです。

独自のレイヤー配列を保持し、自分で削除する必要があります。

[myArrayOfLayersIAdded makeObjectsPerformSelector:@selector(removeFromSuperlayer)];
于 2014-01-28T08:14:25.080 に答える