CGContextSetFillColorWithColor错误(EXC_BAD_ACCESS)

时间:2009-09-28 01:01:11

标签: iphone exc-bad-access

我很困惑为什么我的应用程序崩溃了这个错误。

我已经实现了displayLayer方法(用于渲染CALayer)。 这个方法第一次运行时工作正常。但随后的调用是在发生错误时。

当self.bgColor设置为上下文填充颜色时,似乎会发生错误。 有趣的...如果我在那条线之前创建了bgColor,那么事情就会奏效。但就目前而言,bgColor是在初始化此类(displayLayer方法的容器)时创建的。

-(void)displayLayer:(CALayer *)caLayer
{
  UIGraphicsBeginImageContext(caLayer.frame.size);
  CGContextRef context = UIGraphicsGetCurrentContext();    
  CGContextSetFillColorWithColor(context, self.bgColor);
  CGContextFillRect(context, CGRectMake(0, 0, 320, 25)); 
  [self drawText:context];
  // get image buffer
  UIImage *imageBuffer = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  // set layer contents to image buffer
  caLayer.contents = (id)[imageBuffer CGImage];
}

1 个答案:

答案 0 :(得分:5)

我还没有做过多少iPhone编程,也从未使用过CGColor实例变量,所以我会这样做:

@interface {
    ....
    UIColor *bgColor;
    ....
}
@property (nonatomic, retain) UIColor *bgColor;
...
@end

@implementation
@synthesize bgColor;
- (id)init {
    ...
    self.bgColor = [UIColor blackColor];
    ...
}
-(void)displayLayer:(CALayer *)caLayer {
    ...
    CGContextSetFillColorWithColor(context, self.bgColor.CGColor);
    ...
}
...
@end

[UIColor blackColor]返回一个自动释放的对象,并将其分配给您的实例变量而不保留它。

在init中使用self.bgColor而不仅仅是bgColor并设置属性以保留其值将确保保留颜色并稍后可以在displayLayer中使用。

正如我所提到的,我没有直接使用CGColors的经验,这就是我在上面的代码中使用UIColor的原因。请根据需要进行调整。