2010-11-04 64 views
0

J'ai une grande ligne pour dessiner que la couleur change le long de la ligne.UIColor dans les déclencheurs SetStrokeColorWithColor EXC_BAD_ACCESS - problème de mémoire?

De temps en temps j'obtiens EXC_BAD_ACCESS sur la 4ème ligne du code là.

Je soupçonne que cela a quelque chose à voir avec la libération automatique de la * tempColor, mais je ne sais pas comment faire pour que cela fonctionne efficacement et ne pas tomber en panne.

Des idées? Cela se bloque disons 1 dans 50 exécutions de ce code.

    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:

juste eu un jeu rapide après cette suggestion et je pense peut-être qu'il est parce que heightLocal n'est pas initialisé?

Je cahnged au code ici ...

if(idx > [heightLocal count]){ 
          heightVar = 0; 
          NSLog(@"Made it here"); 
         }else { 
          heightVar = [[heightLocal objectAtIndex:idx] doubleValue]; 
         } 
         UIColor *tempColor = [self colorForHex:heightVar]; 

et il obtient la même erreur sur la première ligne. Le si!

heightLocal est initialisé à l'aide ...

NSArray *heightLocal = routeGrabInstance.pointHeights; 
+1

Êtes-vous sûr IDX est toujours dans le nombre de heightLocal? Séparez l'appel du tableau de l'appel colorForHex pour le débogage. – Ben

+1

vous pouvez essayer si (! HeightLocal || idx> = heightLocal.count) – Ben

+0

Parfait, poster comme réponse et je peux l'accepter pour vous. –

Répondre

1

Je dirais que le tableau que vous obtenez avec:

routeGrabInstance.pointHeights; 

n'est pas retenu correctement. Si c'est comme beaucoup de classes il pourrait être retourné comme autorelease.

Essayez un:

[heightLocal retain] 

après votre

NSArray *heightLocal = routeGrabInstance.pointHeights; 
+0

Ou juste 'NSArray * heightLocal = [routeGrabInstance.pointHeights conserve];' ;-) – arrtchiu