UIColor в SetStrokeColorWithColor вызывает EXC_BAD_ACCESS - проблема с памятью? - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть большая линия, чтобы нарисовать, что цвет меняется вдоль линии.

Время от времени я получаю EXC_BAD_ACCESS в 4-й строке кода там.

Я подозреваю, что это как-то связано с автоматическим выпуском * tempColor, но не может понять, как заставить его работать эффективно и не вылетать.

Есть идеи? Это происходит, скажем, 1 из 50 запусков этого кода.

                    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:

Только что быстро поиграл после этого предложения и, возможно, подумал, что это из-за того, что heightLocal не инициализирован?

Я могу записать код здесь ...

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

и он получает ту же ошибку в первой строке. Если!

heightLocal инициализируется с помощью ...

NSArray *heightLocal = routeGrabInstance.pointHeights;

1 Ответ

1 голос
/ 04 ноября 2010

Я бы сказал, что массив, с которым вы получаете:

routeGrabInstance.pointHeights;

, не сохраняется должным образом.Если это похоже на многие классы, оно может быть возвращено как авто-релиз.

Попробуйте:

[heightLocal retain]

после вашего

NSArray *heightLocal = routeGrabInstance.pointHeights;
...