UIColor en SetStrokeColorWithColor desencadena EXC_BAD_ACCESS - edición de la memoria?
-
29-09-2019 - |
Pregunta
Tengo una línea grande como para llamar la que el color cambia a lo largo de la línea.
De vez en cuando me sale EXC_BAD_ACCESS en la cuarta línea del código allí.
Sospecho que es algo que ver con la autoreleasing del * tempColor pero no puede encontrar la manera de conseguir que esto funcione effeiciently y de no chocar.
Algunas ideas? Este ejemplo se estrella en 1 en 50 carreras de este código.
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, lastx, lasty);
CGContextAddLineToPoint(ctx, point.x, point.y);
UIColor *tempColor = [self colorForHex:[[heightLocal objectAtIndex:idx] doubleValue]];
CGContextSetStrokeColorWithColor(ctx,tempColor.CGColor);
CGContextStrokePath(ctx);
lastx = point.x;
lasty = point.y;
EDIT:
Sólo tenía un juego rápido después de que la sugerencia y, posiblemente, creo que se debe a que no se ha inicializado heightLocal?
Me cahnged al código aquí ...
if(idx > [heightLocal count]){
heightVar = 0;
NSLog(@"Made it here");
}else {
heightVar = [[heightLocal objectAtIndex:idx] doubleValue];
}
UIColor *tempColor = [self colorForHex:heightVar];
y se pone el mismo error en la primera línea. El caso!
heightLocal se inicializa utilizando ...
NSArray *heightLocal = routeGrabInstance.pointHeights;
Solución
Yo diría que la matriz que se obtiene con:
routeGrabInstance.pointHeights;
No está siendo retenido correctamente. Si es como muchas clases podría ser devuelto como autorelease.
Trate a:
[heightLocal retain]
después de su
NSArray *heightLocal = routeGrabInstance.pointHeights;