CGContextSetFillColorWithColor错误(EXC_BAD_ACCESS)

Alv*_*par 1 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];
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*ler 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
Run Code Online (Sandbox Code Playgroud)

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

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

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