【问题标题】:CGContextSaveGState: invalid context 0x0 (Xcode 7 GM)CGContextSaveGState: 无效上下文 0x0 (Xcode 7 GM)
【发布时间】:2015-12-06 02:07:57
【问题描述】:

我在使用 Xcode 7 GM 编译代码后遇到了这个问题。

根据 Apple 的说法,这是一个错误,但它似乎仍然是一个问题。一切正常,但是否有可能摆脱这些错误?

:CGContextSaveGState:无效的上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。

:CGContextTranslateCTM:无效上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。

:CGContextRestoreGState:无效上下文 0x0。如果要查看回溯,请设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量。

其他论坛有人说状态栏,但我没有成功消除该消息。这不是一个大问题,但它是一个无用的“错误”。我正在使用界面生成器。

更新:如果你使用 Swift,我使用了 Objective-Cmaybe this is the question you're looking for

【问题讨论】:

标签: xcode ios9 xcode7 suppress-warnings


【解决方案1】:

这也发生在我的 7 GM 上,但正如 here 所说,从 Info.plist 中删除 UIViewControllerBasedStatusBarAppearance 为我修复了它。

更新:iOS 9.2 似乎没有警告

【讨论】:

  • 您好 Ernesto,您的解决方案也对我有用,但是,如果我希望 UIStatusbar 保持白色怎么办?您是否找到任何解决方案让状态栏保持白色而不会出现这些错误?
  • 嗨,我不知道你所说的“白色”到底是什么意思,但是删除UIViewControllerBasedStatusBarAppearance意味着状态栏的外观现在由可见视图控制器确定,你必须实现preferredStatusBarStyle 并返回所需的值。请注意,如果您的内容视图控制器嵌入在导航/选项卡控制器中,则必须在后者中实现它。
  • 只有在你开启了自动布局的情况下才有效。如果您将其关闭并且无法使用 UIViewControllerBasedStatusBarAppearance 那么您几乎无法将状态栏文本更改为浅色。
  • 那我就忽略这个警告。我认为苹果论坛中有人说没关系。我还在我的 iPhone 上的某些系统应用程序上看到它,所以它应该不会有害。 Sep 23 15:56:43 iPhone SpringBoard[58] <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. ... Sep 23 15:56:43 iPhone Preferences[223] <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
  • might help,这里是苹果thread,苹果工作人员在其中说,这个警告现在可以避免,这是一个已知问题。
【解决方案2】:

我今天找到了导致此错误的另一个原因。

当我在 View Controller 类中编写一些绘图代码时,出现了这些错误。我意识到我必须创建一个 UIView 子类并在覆盖 drawRect 函数中执行绘图步骤。当我将绘图代码移到那里时,所有错误都消失了。

【讨论】:

  • 哥们,你刚刚救了我!谢谢!不得不说,在 Swift 4.0 中,必须重写的是 draw(_ rect: CGRect)。
【解决方案3】:

这是使用调试器的好案例。我在main 中设置了一个断点,然后使用 F7 键单步执行代码,直到出现警告。事实证明,这个虚假错误还有另一种出现方式:

NSColor *myColor = colorFromRGBA(43,51,59,0.95);
[myColor set];
(self.window).backgroundColor = myColor;

它在[myColor set] 上生成警告。显然,我不需要这个并将其注释掉。到那时,错误就消失了。当然,您的体验可能会有所不同。

【讨论】:

  • 这也是我的问题,只是我在 UIBezierPath 上使用了 [path stroke]。这就是为我生成此日志的代码。
【解决方案4】:

重启设备。它解决了我的问题。

【讨论】:

    【解决方案5】:

    我正在使用UIBezierPath绘图

    删除 path.fill() 删除了警告。

    【讨论】:

    • 这将删除贝塞尔路径的颜色填充操作,不会,从而改变您试图实现的功能吗?
    【解决方案6】:

    UIGraphicsPushContext, UIGraphicsPopContext 为我工作

    class CustomLayer: CAShapeLayer {
        override func draw(in context: CGContext) {
            UIGraphicsPushContext(context)
    
            ...Your code here...
    
            UIGraphicsPopContext()
        }
    }
    

    【讨论】:

      【解决方案7】:

      类似于艾曼·易卜拉欣所说的,

      我注释掉了两行,它就像一个魅力。

          bezier2Path.close()
      

      // color.setFill() // bezier2Path.fill()

      【讨论】:

        猜你喜欢
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        相关资源
        最近更新 更多