Search code examples
objective-ccalayer

Trying to remove a sublayer causes terminating with uncaught exception of type NSException


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.


Solution

  • 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.