iOS 7.0下的无效上下文0x0和系统性能下降

Æle*_*lex 218 core-graphics objective-c ios7

我已经阅读了很多关于这个可怕问题的搜索结果,不幸的是,每个人似乎都专注于特定的函数调用.

我的问题是我从多个函数中得到了相同的错误,我猜这些函数是从我使用的函数中调用的.

更糟糕的是,实际代码是在另一个项目中导入的自定义私有框架内,因此调试并不那么简单?

有人能指出我正确的方向吗?我有一种感觉我错误地调用某些方法或者上下文不好,但xcode的输出在这一点上并没有多大帮助.

:CGContextSetFillColorWithColor:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

:CGContextSetStrokeColorWithColor:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

CGContextSaveGState:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

:CGContextSetFlatness:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

:CGContextAddPath:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

:CGContextDrawPath:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

:CGContextRestoreGState:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

:CGContextGetBlendMode:无效的上下文0x0.这是一个严重的错误.该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低.此通知是礼貌的:请解决此问题.它将成为即将到来的更新中的致命错误.

当呈现自定义视图或其继承的类之一时,可能会发生这些错误.此时它们会多次生成,直到键盘不提供任何输入.触摸事件仍然已注册,但系统速度变慢,最终可能导致未分配的对象错误.

编辑#1:我确实可以访问正在导入的框架,但我没有看到导致问题的类中有任何奇怪的东西.

编辑#2:我刚刚收到一封发送给iOS 7.1的电子邮件.我很想知道这是否会消失,或者变得更糟,还是可以解决.

Art*_*pie 200

如果您对导致这些日志的代码感到好奇,可以在其添加符号断点CGPostError.

  • 这是一个很好的建议.对于那些不熟悉符号断点或者如何在Xcode中添加它们的人来说,这是Apple关于它的文档.https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_a_symbolic_breakpoint.html (27认同)
  • Votin'这个因为,虽然它不是这个特定情况下的解决方案,但它通常会突出故障的位置,当它在程序员自己的代码范围内时. (10认同)
  • 感谢关于CGPostError的提示.我在它上面放了一个断点,看起来我没有做任何事情导致这个问题.在我的情况下,它发生在主线程上,但不在我的代码中. (2认同)

bil*_*tum 162

其他人会要求您发布访问核心图形上下文的代码,但我怀疑这是问题所在.这些无效的上下文0x0错误消息很常见,很容易在iOS 7中重现.事实上,我可以使用带有零代码的storyboard重现错误.我将UITextField拖到IB的画布上,运行应用程序,然后在文本字段内双击.

在许多情况下,我很难认真对待无效的上下文0x0错误消息.我不知道你的情况是否值得更加关注(我同意Rob Napier认为值得调查,特别是如果你明确使用图形上下文).

在我自己的项目中,我希望有一天这些错误中的许多都会神奇地消失(但那一天并没有带来7.0.3).

更新:安装Xcode 5.1并定位iOS 7.1后,我无法再通过在空文本字段内双击来重现错误.

  • 你对这个iOS 7 UITextField错误完全正确.不过要确保打开它的雷达(bugreport.apple.com)但是不要太快就认为这是问题所在.由于这是一个自定义视图,因此值得首先调查@Rob的观点. (10认同)
  • 我也有同样的问题.它也只发生在模拟器中,但我注意到,当我收到错误时,我无法使用Mac键盘输入模拟器而我必须使用屏幕键盘,这非常令人沮丧.在我的应用程序中,我没有使用任何自定义视图,因此我从不手动创建或使用CG上下文. (3认同)
  • 这发生在我身上..我在IB上放了一个uitextfield,得到那个错误,键盘没有出现..是否有一些解决方案?谢谢 (2认同)

Rob*_*Rob 42

这些类型的错误在历史上是调用核心图形函数的结果,而不是在drawRect诸如UIGraphicsBeginImageContextUIGraphicsEndImageContext/或其他UIKit函数(如开始和结束上下文的其他UIKit函数)内部或之间建立的上下文中.

尽管如此,bilobatum是正确的,这个特定的错误序列可能是他在答案中引用的iOS 7错误的结果.如果没有在你的iOS6目标中看到这些错误,或者在快速扫描这个私有框架之后你没有发现任何可疑的Core Graphics调用,那么它可能就是这个iOS 7错误.好的捕获,bilobatum!


lbs*_*eek 26

UIGraphicsBeginImageContext( size );
CGContextRef context = UIGraphicsGetCurrentContext();
Run Code Online (Sandbox Code Playgroud)

确保size.width或size.height不为0,

您可以将符号断点添加到CGPostError以进行检查


Kev*_*ord 19

我有一个简单的UITextField问题(键盘没有显示和控制台上的许多不同的无效上下文错误消息).我只是通过查找SO上的另一个问题找到一个解决方法:找不到CFBundle CertUIFramework.axbundle的可执行文件

做就是了:

单击iOS模拟器>重置内容和设置...然后再次运行.

问题不应该再存在了


Den*_*hov 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];
Run Code Online (Sandbox Code Playgroud)

经过一些思考和测试后我发现了问题 - 就是这个电话:

[path fill];
Run Code Online (Sandbox Code Playgroud)

当我检测到 - 在我的代码中,这个调用是没有必要的,因为填充将通过其他方式完成 - 所以我只是删除它.


Dav*_*oop 5

我有同样的问题,我忘了导入QuartzCore/QuartzCore.h,这解决了我的这些错误的问题.

    #import <QuartzCore/QuartzCore.h>
Run Code Online (Sandbox Code Playgroud)


小智 5

直接答案: 问题是因为除了- (void)drawRect:(CGRect)rect这个方法之外你已经使用了CGContext等核心图形元素.

现在请将您的代码移动到此方法.它会strop给你警告/错误.