我已经阅读了很多关于这个可怕问题的搜索结果,不幸的是,每个人似乎都专注于特定的函数调用。
我的问题是我从多个函数中得到了相同的错误,我猜测它是从我使用的函数中调用的。
更糟糕的是,实际代码是在另一个项目中导入的自定义私有框架内,因此,调试并不那么简单?
有人能指出我正确的方向吗?我有一种感觉我错误地调用某些方法或者上下文不好,但是xcode的输出在这一点上并没有很大帮助。
:CGContextSetFillColorWithColor:无效的上下文0x0。这是 一个严重的错误。此应用程序或它使用的库正在使用 无效的上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetStrokeColorWithColor:无效的上下文0x0。这个 是一个严重的错误。此应用程序或其使用的库正在使用 一个无效的背景,从而有助于整体 系统稳定性和可靠性降低。这个通知是一个 礼貌:请解决这个问题。它将成为一个致命的错误 即将到来的更新。
CGContextSaveGState:无效的上下文0x0。这是一个严重的错误。 此应用程序或其使用的库正在使用无效的上下文 从而有助于系统的整体退化 稳定性和可靠性。此通知是礼貌的:请解决此问题 问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextSetFlatness:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextAddPath:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextDrawPath:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextRestoreGState:无效的上下文0x0。这是一个 严重错误。此应用程序或它使用的库正在使用 无效的上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
:CGContextGetBlendMode:无效的上下文0x0。这是一个严肃的问题 错误。此应用程序或其使用的库使用无效 上下文,从而导致整体退化 系统稳定性和可靠性。这个通知是礼貌的:拜托 解决这个问题。在即将到来的更新中,它将成为一个致命的错误。
当呈现自定义视图或其继承的类之一时,可能会发生这些错误。此时它们会多次生成,直到键盘不提供任何输入。触摸事件仍然已注册,但系统速度变慢,最终可能导致未分配的对象错误。
编辑#1:我确实可以访问正在导入的框架,但是我没有在导致问题的类中看到任何奇怪的内容。
编辑#2:我刚刚收到一封发送给iOS 7.1的电子邮件。我很想知道这是否会消失,或者变得更糟,或者可以解决。
答案 0 :(得分:200)
如果您对导致这些日志的代码感到好奇,可以在CGPostError
上add a symbolic breakpoint。
答案 1 :(得分:162)
其他人会要求您发布访问核心图形上下文的代码,但我怀疑这是问题所在。这些无效的上下文0x0错误消息很常见,很容易在iOS 7中重现。事实上,我可以使用带有零代码的storyboard重现错误。我将UITextField拖到IB的画布上,运行应用程序,然后在文本字段内双击。
在许多情况下,我很难认真对待无效的上下文0x0错误消息。我不知道你的情况是否值得更加关注(我同意Rob Napier的说法值得调查,特别是如果你明确使用图形上下文的话)。
在我自己的项目中,我希望有一天这些错误中的许多都会神奇地消失(但那天没有7.0.3)。
更新:安装Xcode 5.1并定位iOS 7.1后,我无法再通过在空文本字段内双击来重现错误。
答案 2 :(得分:42)
这些类型的错误在历史上是在不在drawRect
内建立的上下文中或在UIGraphicsBeginImageContext
和UIGraphicsEndImageContext
之类的调用(或其他UIKit函数)之间调用Core Graphics函数的结果像开始和结束上下文的那样。)
尽管如此,bilobatum是正确的,这个特定的错误序列可能是他在答案中引用的iOS 7错误的结果。如果没有在你的iOS6目标中看到这些错误,或者在快速扫描这个私有框架之后你没有发现任何可疑的Core Graphics调用,那么它可能就是这个iOS 7错误。好的捕获,bilobatum!
答案 3 :(得分:26)
UIGraphicsBeginImageContext( size );
CGContextRef context = UIGraphicsGetCurrentContext();
确保size.width或size.height不是0,
您可以将符号断点添加到CGPostError以检查
答案 4 :(得分:19)
我遇到了一个简单的UITextField问题(键盘没有显示,控制台上出现了许多不同的无效上下文错误消息)。 我只是通过查看SO上的另一个问题找到了解决方法:Cannot find executable for CFBundle CertUIFramework.axbundle
只是做:
点击iOS模拟器>重置内容和设置...然后重新运行。
问题不应再存在了
答案 5 :(得分:16)
在我的情况下,我在这段代码中遇到了这些错误:
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
UIBezierPath *path;
path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(size*2, 0)];
[path addLineToPoint:CGPointMake(size, size*2)];
[path closePath];
[path fill];
shapeLayer.path = path.CGPath;
shapeLayer.strokeColor = [[UIColor blackColor] CGColor];
shapeLayer.fillColor = color;
shapeLayer.lineWidth = width;
[self addSublayer:shapeLayer];
经过一些思考和测试后我发现了问题 - 就是这个电话:
[path fill];
当我检测到 - 在我的代码中,这个调用不是必需的,因为填充将通过其他方式完成 - 所以我只是删除它。
答案 6 :(得分:5)
直接答案:
问题是因为除了- (void)drawRect:(CGRect)rect
这种方法之外,你已经使用了CGContext等核心图形元素。
现在请将您的代码移动到此方法。它会strop给你警告/错误。
答案 7 :(得分:5)
我有同样的问题,我忘了导入QuartzCore / QuartzCore.h,这解决了我的问题。
#import <QuartzCore/QuartzCore.h>
答案 8 :(得分:4)
我收到此错误是因为我使用UIColor对象作为CATextLayer对象中使用的NSAttributedString字典中的属性。我更改了字典以容纳CGColorRef,错误消失了。
[wordAttributes setObject:(id)[UIColor whiteColor].CGColor forKey:(NSString*)kCTForegroundColorAttributeName];
答案 9 :(得分:2)
在某些情况下,您可能需要添加第#import <QuartzCore/QuartzCore.h>
行。
答案 10 :(得分:2)
我遇到过从UIGraphicsGetCurrentContext()
返回的上下文为NULL
的情况,如果您尝试将其用于此消息,则会出现此消息。视图有责任在调用UIGraphicsPushContext
之前使用drawRect:
推送上下文,如果您直接调用drawRect:
而不是[view setNeedsDisplay]
,那么您可能无法设置上下文。我的预感是,在iOS 7之前,为init
上的视图推送了上下文,现在在iOS 7上,直到第一次调用drawRect:
时才会推送上下文。我怀疑一些UIKit代码直接调用drawRect:
,这就是为什么即使没有自定义绘图也会出现某些代码的问题。
解决方案(如果进行自定义绘图):
drawRect:
,使用[view setNeedsDisplay]
或如果您需要立即使用图片[view.layer draw]
drawRect:
获取上下文但不要在if语句if (context) {<do drawing here>}
答案 11 :(得分:2)
在视图中放置和移动UI元素(尤其是以编程方式绘制的自定义元素)的某些情况下,关闭受影响视图中的自动布局会导致此错误消失。当我发现这种症状时,我正在使用JVFloatLabeledTextField。
答案 12 :(得分:2)
我在自定义CALayer实现的drawInContext(..)方法中遇到此错误。 UIBezierPath尝试使用UIGraphicsGetCurrentContext(),默认情况下在自定义层中为零。 online documentation非常清楚地解释了这一点 -
但是,如果您没有使用UIView对象进行绘图,则必须使用UIGraphicsPushContext函数手动将有效上下文压入堆栈。
这里的代码最终与我的内联注释一致(Swift代码,但解决方案是相同的)
override func drawInContext(ctx: CGContext!) {
var path = UIBezierPath()
// 1. Make sure you push the CGContext that was first passed into you.
UIGraphicsPushContext(ctx)
path.moveToPoint(CGPoint(x: 0, y: 0))
path.addLineToPoint(CGPoint(x: 150, y: 150))
var lineColor = UIColor.blueColor()
lineColor.setStroke()
path.lineWidth = 2
path.stroke(
// 2. Pop the context after you are done.
UIGraphicsPopContext()
}
答案 13 :(得分:2)
在我的情况下,当我创建一个带有cap insets的可靠图像时,我发出了这个警告。问题是我没有留下至少1个像素的&#34;无上限&#34;区域。
UIImage *image = [UIImage imageNamed:@"name"];
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(20, 10, 20, 10); //Problem here if the width is 20 or the height is 40
image = [image resizableImageWithCapInsets:edgeInsets];
答案 14 :(得分:1)
我收到了代码错误
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:pointA];
[path addLineToPoint:pointB];
[path addLineToPoint:pointC];
[[UIColor colorWithHexString:@"EFEFEF"] set];
[path fill];
[path closePath];
CAShapeLayer *triangle = [CAShapeLayer layer];
triangle.fillColor = [UIColor colorWithHexString:@"EFEFEF"].CGColor;
triangle.path = path.CGPath;
return triangle;
并删除代码后
[[UIColor colorWithHexString:@"EFEFEF"] set];
[path fill];
世界变得沉默
答案 15 :(得分:1)
我使用以下代码从上下文创建UIImage:
UIGraphicsBeginImageContext(size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, color.CGColor); CGContextFillRect(context, (CGRect){.size = size}); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
因此我收到了错误。
所以我删除了派生数据内容,重新启动了我的XCode。它起作用了。
答案 16 :(得分:1)
我有同样的问题。 在我的项目中,我尝试创建一个textField并将其添加到我的pdf文件中。 旧代码:
- (void) drawInContext:(CGContextRef)context {
//Otherwise we're upside-down
CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));
CGContextSetTextDrawingMode(context, kCGTextFill); // This is the default
[[UIColor blackColor] setFill]; // ***This is the problem ***
CGFloat x = self.rect.origin.x;
CGFloat y = self.rect.origin.y + self.font.pointSize;
[self.text drawAtPoint:CGPointMake(x, y)
withAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:12]}];
}
解决了这个问题后,代码改变了:
old:[[UIColor blackColor] setFill];
new:CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
我在UIColor SetFill doesn't work找到了解决方案。 谢谢你的帮助。
答案 17 :(得分:0)
从模拟器中卸载应用程序并再次运行
答案 18 :(得分:0)
这很骇人,但对我有用。
我在UIImageView
的{{1}}中设置了UITableViewCell
,并为其设置了大小和约束条件。
然后在我的视图控制器的init
中执行此操作:
cellForRowAtIndexPath
这可以避免错误,然后在函数的下面设置该let img = PFImageView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
img.setImage(withFile: nil, defaultText: message.senderUsername)
cell.profileImageView?.image = img.image
的实际图像。上面的代码是一个很好的默认
答案 19 :(得分:0)
如果在使用UIBezierPath并为笔划或填充设置颜色时发生错误,请将设置颜色代码放在drawRect函数中而不是其他位置。
答案 20 :(得分:0)
与其他评论过的人一样,当我做以下任何事情时,我都会收到此警告:
在空白文本字段中:双击,触摸并按住,长按一次。
这似乎只影响iOS 7.0.3
我发现了一个解决方法,如果您的粘贴板不是NULL,则不会触发警告。
所以我在textFieldDidBeginEditing中执行了以下操作:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
if (pasteboard.string.length == 0) {
pasteboard.string = @" ";
}
}
我在iphone 4s,5和5s的iOS 7.0.3模拟器中对此进行了测试,不再收到警告。我也在iphone 6和6 plus的iOS 8模拟器中对此进行了测试,但我不相信iOS 8会受到影响。
在发现这项工作之前经历了两天的挫折,所以我真的希望我的回答可以帮助那些遇到同样问题的人。
答案 21 :(得分:0)
当我在UIActivity子类
中的activityImage方法中输入错误的图像名称时,我得到了它- (UIImage *)activityImage
{
return [UIImage imageNamed:@"img.png"];
}
键入正确的图像为我解决了。
答案 22 :(得分:0)
对我来说,我收到了这个错误,因为我发布了CGContextRef,如下所示:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
// DRAW BACKGROUND CIRCLE
CGContextSetFillColorWithColor(context, [[UIColor gray] colorWithAlphaComponent:0.6].CGColor);
CGContextFillEllipseInRect(context, rect);
// CGContextRelease(context);
}
删除版本解决了问题
答案 23 :(得分:0)
因为我设置了
而出现此错误textfield.delegate = self
不实现任何委托例程。删除该行解决了我的问题
答案 24 :(得分:0)
对我来说,答案是我在drawRect:
中不必要地释放了图形上下文。在CGPostError上抛出一个符号断点让我指出了罪魁祸首。
答案 25 :(得分:0)
当我只用占位符文本触摸空白字段时,我在UITextField中遇到了这个问题。我使用以下解决方法来消除空白字段:
-(void)textFieldDidBeginEditing:(UITextField *)textField{
textField.text=[@" " stringByAppendingString:textField.text];
//other stuff here
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
if(textField.text.length>0){
if([[textField.text substringToIndex:1] isEqualToString:@" "])
textField.text=[textField.text substringFromIndex:1];
}
// other stuff here
}