CGContextSaveGState:无效上下文 0x0 (Xcode 7 GM)

CGContextSaveGState: invalid context 0x0 (Xcode 7 GM)

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

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

: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

其他论坛有人说了状态栏的问题,但我没有成功消除该消息。这不是什么大问题,但是没用"error"。我正在使用 Interface Builder。

更新:如果你用Swift,我用Objective-C

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

更新:警告似乎随着 iOS 9.2

消失了

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

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

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

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

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

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

我正在使用 UIBezierPath

绘图

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

UIGraphicsPushContextUIGraphicsPopContext 为我工作

class CustomLayer: CAShapeLayer {
    override func draw(in context: CGContext) {
        UIGraphicsPushContext(context)

        ...Your code here...

        UIGraphicsPopContext()
    }
}

与 Ayman Ibrahim 所说的类似,

我注释掉了两行,效果很好。

    bezier2Path.close()

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