Tôi có mã biên dịch mà không gặp sự cố. Nó chạy tốt trên trình giả lập iPhone, nhưng trên thiết bị của tôi, tôi nhận được EXC_BAD_ACCESS.CG Gradient chạy trên trình mô phỏng nhưng không chạy trên iPhone
Điều này xảy ra trong chức năng trợ giúp để vẽ gradient. Tôi đã theo dõi this tutorial để làm điều đó. Mã tôi có là như sau:.
- (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);
}
Xcode nổi bật dòng 12 (một với nil];
như dòng lỗi
Đối với Peter Hosey, đây là đầu ra debugger:
(gdb) po startColor
<CGColor 0x1deca0> [<CGColorSpace 0x1d3280> (kCGColorSpaceDeviceGray)] (1 1)
Current language: auto; currently objective-c
(gdb) po endColor
<CGColorSpace 0x1bf120> (kCGColorSpaceDeviceRGB)
(gbd)
My trình mô phỏng (và iPhone) chạy trên iOS 5.
Điều gì có thể gây ra sự cố này?
Điều đó có thể có nghĩa là một trong startColor hoặc endColor là một con trỏ lơ lửng; bạn có thể hiển thị mã gọi drawLinearGradient không? – Tommy
Tôi cập nhật gist với mã gọi – ksol
Nếu bạn gõ 'po startColor' và' po endColor' vào trong Debugger Console, bạn sẽ nhận được gì? –