2014-02-27 3 views
0

아이폰 4S 아이폰 OS 7.0.4 본때를 보여 주면서 TestFlight 충돌 로그가 있습니다. 이 라인에CGColorRef를 추가 할 때 CFArrayAppendValue 충돌이 발생합니다.

enter image description here

충돌 : 충돌이 발생

CFArrayAppendValue(colorArray, lighterColor); 

전체 방법 :이 문제를 해결하는 방법을 알고 싶어요

- (UIImage *) imageWithColor:(UIColor *)color_ Height:(CGFloat)height_ Retina:(BOOL)retina_ 
{ 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(1.0f, height_), YES, retina_ ? 2.0f : 1.0f); 
    CFMutableArrayRef colorArray = CFArrayCreateMutable(NULL, 2, &kCFTypeArrayCallBacks); 
    CGColorRef lighterColor = CGColorRetain([[color_ lighterColor] CGColor]); 
    CGColorRef darkerColor = CGColorRetain([[color_ darkerColor] CGColor]); 
    CFArrayAppendValue(colorArray, lighterColor); 
    CFArrayAppendValue(colorArray, darkerColor); 
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColors(space, colorArray, NULL); 
    CGContextDrawLinearGradient(UIGraphicsGetCurrentContext(), gradient, CGPointMake(0.0f, 0.0f), CGPointMake(1.0f, height_), kCGGradientDrawsBeforeStartLocation); 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    CGColorRelease(lighterColor); 
    CGColorRelease(darkerColor); 
    return image; 
} 

.

도움을 주시면 감사하겠습니다.

+0

'lighterColor'가 배열에 추가되기 전에 NULL이 아닌지 확인하십시오. – Emmanuel

답변

0

충돌의 원인은 CFArrayAppendValue에 전달 된 값이 NULL입니다. 또는 오히려, 콜백 콜백에서 예상하지 못한 것입니다. 유효한 CGColorRef은 retain 콜백과 함께 잘 작동합니다.

위에서 붙여 넣은 코드를 보면 가능성이 높은 원인은 color_입니다. 이로 인해 lighterColor이 021이되고 CGColor 구성원이 NULL

이 메소드에 nil 확인을 추가하거나 이전 시점에 응용 프로그램을 디버그합니다.

+0

color_가 nil인지 확인하는 줄을 추가했습니다. nil이면 [UIColor whiteColor]를 사용합니다. 아직도 충돌! – iWheelBuy

+0

동일한 지점에 있습니까? 그럴 가능성은 희박합니다. lighterColor가 NULL이 아닌지 확인할 수 있습니까? – Buzzy

+0

다음 업데이트에서이 확인을 구현할 예정입니다. – iWheelBuy

관련 문제