I'm adding a gradient layer and attaching name to it. Later on when I try to remove it by searching for that name, my app crashes. Here's the code I'm using.
CAGradientLayer* gradient = [CAGradientLayer layer];
gradient.colors = [NSArray arrayWithObjects:
..... setting up gradient.....
gradientLayer.name = @"GradientLayer";
[self.myView.layer insertSublayer:gradient atIndex:0];
Later on I'm trying to remove it.
for (CALayer *layer in self.myView.layer.sublayers) {
if ([layer.name isEqualToString:@"GradientLayer"])
{
[layer removeFromSuperlayer];
}
}
It crashes when it tries to remove the sublayer.
Your loop mutates self.myView.layer.sublayers
while it is being enumerated.
Add break;
after [layer removeFromSuperLayer];
to stop enumerating, then you will be fine.