2010-05-11 5 views
0

Le code "parfois" provoque un blocage (EXC_BAD_ACCESS) lors de l'exécution sur l'appareil. Jamais sur le simulateur.EXC_BAD_ACCESS dans drawRect

Pour le reproduire, je continue de superposer un contrôleur de vue modale sur mon contrôleur de table. Cela se produit généralement lorsque le contrôleur de vue modale est fermé.

Des idées pour lesquelles cela se produit?

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)]; 

[...] 

Merci

+0

Il peut être sur-relâché la propriété UIImages CGImage. Accédez-vous à la propriété CGImage n'importe où? – tonklon

+0

Merci pour la réponse mais non, je n'accède à la propriété CGImage nulle part ... – nicktmro

Répondre

1

Si vous utilisez drawInRect dans une situation de la bande de roulement multiples comme NSOperationQueue, essayez d'utiliser un verrou pour éviter « drawInRect » est appelé dans plus d'un fil. J'ai rencontré un problème similaire et l'ai résolu de cette manière.

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

}