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;
¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top