添加CGColorRef时CFArrayAppendValue崩溃

时间:2014-02-27 05:33:34

标签: ios objective-c nsarray

我有一个来自iPhone 4S iOS 7.0.4 Jailbreak的用户的TestFlight崩溃日志。

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;
}

我很想知道如何处理这个问题。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

崩溃的原因是传入CFArrayAppendValue的值是NULL。或者更确切地说,保留回调不期望的东西。有效的CGColorRef可以使用保留回调。

查看上面粘贴的代码,可能的原因是color_为零。这会导致lighterColor为零,其CGColor成员为NULL

在此方法中添加nil检查或在较早时刻调试应用程序。