Tengo un código que compila sin problemas. Funciona bien en el simulador de iPhone, pero en mi dispositivo, obtengo un EXC_BAD_ACCESS.CG Gradient se ejecuta en el simulador, pero no en el iPhone
Esto sucede en una función auxiliar para dibujar degradado. Seguí this tutorial para hacerlo. El código que tengo es el siguiente:.
- (void) drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorRef whiteColor = [UIColor whiteColor].CGColor;
CGColorRef lightGrayColor = [UIColor colorWithRed:230.0/255.0
green:230.0/255.0
blue:230.0/255.0
alpha:1.0].CGColor;
CGColorRef separatorColor = [UIColor colorWithRed:208.0/255.0
green:208.0/255.0
blue:208.0/255.0
alpha:1.0].CGColor;
CGRect paperRect = self.bounds;
CGRect nameRect = self.nameLabel.frame;
CGPoint sepStartPoint = CGPointMake(nameRect.origin.x,
nameRect.origin.x + nameRect.size.height + 2);
CGPoint sepEndPoint = CGPointMake(nameRect.origin.x + nameRect.size.width,
nameRect.origin.x + nameRect.size.height + 2);
drawLinearGradient(context, paperRect, lightGrayColor, whiteColor);
draw1PxStroke(context, sepStartPoint, sepEndPoint, separatorColor);
}
// Callee, where the problem is
void drawLinearGradient(CGContextRef context,
CGRect rect,
CGColorRef startColor,
CGColorRef endColor)
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = { 0.0, 1.0 };
NSArray *colors = [NSArray arrayWithObjects:
(__bridge id)startColor,
(__bridge id)endColor,
nil]; // Here is the line
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,
(__bridge CFArrayRef) colors, locations);
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextSaveGState(context);
CGContextAddRect(context, rect);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
}
destacados Xcode línea 12 (el que tiene nil];
como la línea de error
Para Peter Hosey, aquí está la salida de un depurador:
(gdb) po startColor
<CGColor 0x1deca0> [<CGColorSpace 0x1d3280> (kCGColorSpaceDeviceGray)] (1 1)
Current language: auto; currently objective-c
(gdb) po endColor
<CGColorSpace 0x1bf120> (kCGColorSpaceDeviceRGB)
(gbd)
Mi simulador (y iPhone) se ejecuta en iOS 5.
¿Qué podría estar causando este bloqueo?
Eso probablemente significa que uno de startColor o endColor es un puntero colgante; ¿Puedes mostrar el código que llama a drawLinearGradient? – Tommy
Actualicé la esencia con el código de llamada – ksol
Si escribe 'po startColor' y' po endColor' en la consola del depurador, ¿qué obtiene? –