EXC_BAD_ACCESS в drawRect - PullRequest
       18

EXC_BAD_ACCESS в drawRect

0 голосов
/ 11 мая 2010

Код ниже «иногда» вызывает сбой (EXC_BAD_ACCESS) при запуске на устройстве. Никогда на симуляторе.

Чтобы воспроизвести его, я продолжаю накладывать контроллер модального представления поверх моего контроллера табличного представления. Обычно это происходит, когда модальный контроллер вида уволен.

Есть идеи, почему это происходит?

CGContextRef context = UIGraphicsGetCurrentContext();

//set the background of the cell
[self.backgroundColor set];
CGContextFillRect(context, rect);

// get cached image
UIImage *image = [[ImageUtil sharedInstance] getImageByRouteType:route.type];
CGSize imageSize = CGSizeMake(IMAGE_WIDTH, IMAGE_WIDTH);
// DEBUGGER STOPS ON THIS NEXT LINE, image object is fine though
[image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];

[...]

Спасибо

1 Ответ

1 голос
/ 24 января 2011

Если вы используете drawInRect в ситуации с несколькими шагами, такой как NSOperationQueue, попробуйте использовать блокировку, чтобы избежать вызова drawInRect в более чем одном потоке. Я встретил подобную проблему и решил ее таким образом.

@synchronized([UIImage class]){
    UIGraphicsBeginImageContext(newSize);
    CGRect rect = CGRectMake(0.0, 0.0, newSize.width, newSize.height);
    [self drawInRect: rect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

} 
...