Ios 添加CGColorRef时CFArrayAppendValue崩溃

Ios 添加CGColorRef时CFArrayAppendValue崩溃,ios,objective-c,nsarray,Ios,Objective C,Nsarray,我有一份来自iPhone 4S iOS 7.0.4越狱用户的试飞坠毁日志 在这条线上崩溃: CFArrayAppendValue(colorArray, lighterColor); 发生崩溃时的完整方法: - (UIImage *) imageWithColor:(UIColor *)color_ Height:(CGFloat)height_ Retina:(BOOL)retina_ { UIGraphicsBeginImageContextWithOptions(CGSizeM

我有一份来自iPhone 4S iOS 7.0.4越狱用户的试飞坠毁日志

在这条线上崩溃:

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;
}
我很想知道如何处理这个问题


感谢您的帮助

崩溃的原因是传递给CFArrayAppendValue的值为
NULL
。或者更确切地说,是retain回调所不期望的东西。有效的
CGColorRef
将与retain回调一起正常工作

查看您上面粘贴的代码,可能的原因是
color\uu
为零。这将导致
lighterColor
为nil,其
CGColor
成员为
NULL


在这个方法中添加一个nil检查,或者在前面调试您的应用程序。

我添加了一行检查color_uuu是否为nil。如果为零,则使用[UIColor whiteColor]。仍然崩溃!在同一地点?这是极不可能的。能否验证lighterColor是否为NULL?在将其添加到数组之前,请验证
lighterColor
是否为NULL。