许多CGContext无效的上下文0x0错误iOS 8

3

我的应用突然开始生成大量这种类型的错误:

<Error>: CGContextSetInterpolationQuality: invalid context 0x0. This is a serious error. 
This application, or a library it uses, is using an invalid context  and is thereby contributing  
to an overall degradation of system stability and reliability. This notice is a courtesy: please  
fix this problem. It will become a fatal error in an upcoming update.

对于CGContextDrawImage、CGBitmapContextCreateImage等操作也是同样的处理方式。

我显然在做些严重错误的事情,但我不确定是什么。我使用了下面的代码,这是我从别人那里为我的应用程序改编的。它基本上调整图像的大小,考虑到设备的因素。

代码似乎正常工作,我的应用程序也按照预期运行,但我不确定是什么导致了这些看起来相当严重的错误。有人能看出我代码中可能导致这些错误的明显问题吗?

-(UIImage *)resizeImage:(NSString *)imageName {

    UIImage *originalImage = [UIImage imageNamed:imageName];
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, originalImage.size.width * myScalingFactor, originalImage.size.height * myScalingFactor));
    CGImageRef imageRef = originalImage.CGImage;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef bitmap = CGBitmapContextCreate(
                                                NULL,
                                                newRect.size.width,
                                                newRect.size.height,
                                                8,
                                                (newRect.size.width * 4),
                                                colorSpace,
                                                kCGImageAlphaPremultipliedLast
                                                );

    CGColorSpaceRelease(colorSpace);
    CGContextSetInterpolationQuality(bitmap, 3);
    CGContextDrawImage(bitmap, newRect, imageRef);
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
    CGContextRelease(bitmap);
    CGImageRelease(newImageRef);

    return newImage;
}
2个回答

12

CGContextSetInterpolationQuality:无效的上下文0x0。意味着传递给CGContextSetInterpolationQualitycontext参数是空指针(因此内存地址为0x0)。

为避免此情况,您应该检查CGBitmapContextCreate是否返回NULL。如果提供了无效的宽度/高度(任一一个为零),则可能会发生这种情况。


太好了,那就是问题所在。我正在加载一个不存在的图像,并将值0传递给上下文。非常感谢您的答案。 - pingin
我在这种情况下遇到了这个错误 https://dev59.com/oVjUa4cB1Zd3GeqPV_L8 - loretoparisi

-2

编辑。2017年8月
这可能是无用的建议。出于纪念的目的,我不会删除它。我已经记不起这发生的情况了,所以价值甚微。


这是一个我刚学会忽略的错误。
即使是iOS也经常遇到这个错误,所以很难认真对待。如果你将设备连接到Mac并查看调试控制台,你会发现Springboard也一直记录这些错误。在下面的截图中,我只是改变了屏幕亮度,就让设备控制台超载了。 enter image description here

不幸的是,在调试时这会使控制台混乱,但根据this线程,这是iOS的问题,可以忽略。

编辑
我不知道为什么我总是被点踩这个回答。我引用了我的来源,显示苹果员工明确承认这是操作系统的问题。如果还有人感觉需要点踩,请告诉我我哪里做错了。谢谢。enter image description here


你一直被踩的原因是你说“这是一个我刚学会忽略的错误”。软件开发人员不能学会忽略错误。 - fotisgpap
@fotisgpap 嗯,考虑到这是一个已知的操作系统错误,我不能做太多事情。然而,当问题超出我的控制范围,苹果工程师告诉我忽略它时,我通常不会忽略错误。尽管很不满意,但我还是这样做了。我不能反编译iOS并部署它,对吧?很明显,一开始我没有忽略它,这就是为什么我找到了这篇文章和苹果论坛问题等其他内容的原因。 - mylogon
但正如您可以从上面的答案看到的那样,某些情况下错误是由开发者引起的。如果每个人都遵循您忽略此错误的建议,因为在某些情况下它是iOS bug,人们将无法找到解决开发者bug的方法。最好重新表述一下。您可以说,在您的情况下(描述您的情况),这是一个iOS bug,您可以忽略它。 - fotisgpap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接