내 응용 프로그램이이 오류로 인해 충돌하는 이유가 혼동 스럽습니다.CGContextSetFillColorWithColor 오류 (EXC_BAD_ACCESS)
displayLayer 메서드 (CALayer 렌더링 용)를 구현했습니다. 이 메서드를 처음 실행하면 정상적으로 작동합니다. 그러나 이에 대한 후속 호출은 오류가 발생한 시점입니다.
self.bgColor가 컨텍스트 채우기 색으로 설정되면 오류가 발생하는 것 같습니다. 흥미롭게도 ... 그 라인 바로 앞에 bgColor를 만들면 모든 것이 작동합니다. 그러나 그대로,이 클래스 (displayLayer 메서드의 컨테이너)의 초기화시 bgColor가 생성됩니다.
@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는, 오토 릴리즈 객체를 반환 :
-(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];
}
오, 세상에, scrunched 코드 스 니펫에 대해 유감스럽게 생각합니다 !! – AlvinfromDiaspar
코드의 서식을 지정하려면 각 줄의 시작 부분에 4 개의 공백을 사용하거나 1과 0이 모두있는 단추를 사용하십시오. –
어떻게 bgColor를 설정하고 있습니까? 코드 스 니펫을 올리시겠습니까? 나는 당신이 그것을 유지하지 않을 것으로 의심하고, autoreleased 색상을 사용합니다. displayLayer가 처음 호출 된 것은 아마도 같은 runloop에 있기 때문에 아직 색상이 출시되지 않았습니다. 그런 다음 runloop이 끝나고 bgColor가 해제되고 이후 displayLayer를 호출 할 때 내 헤더 파일에 EXC_BAD_ACCESS 오류 –