如何设置CG_CONTEXT_SHOW_BACKTRACE环境变量?


90

我的视图中有三个按钮。在viewDidLoad()中设置cornerRadus之后:button.layer.cornerRadius = 20我在日志中收到以下错误消息:

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

问题:

  • 如何设置CG_CONTEXT_SHOW_BACKTRACE环境变量?
  • 或者如何解决此警告?

好吧,现在我已经从消息中得到了回溯。这对我来说没有任何意义。请帮忙...

Aug  7 14:27:00  <Error>: CGContextSaveGState: invalid context 0x0. Backtrace:
      <-[UIStatusBarItemView updateContentsAndWidth]+33>
       <-[UIStatusBarItemView initWithItem:data:actions:style:]+477>
        <+[UIStatusBarItemView createViewForItem:withData:actions:foregroundStyle:]+134>
         <-[UIStatusBarLayoutManager _createViewForItem:withData:actions:]+163>
          <-[UIStatusBarLayoutManager _prepareEnabledItemType:withEnabledItems:withData:actions:itemAppearing:itemDisappearing:]+36
           <-[UIStatusBarLayoutManager prepareEnabledItems:withData:actions:]+92>
            <-[UIStatusBarForegroundView _setStatusBarData:actions:animated:]+797>
             <-[UIStatusBarForegroundView setStatusBarData:actions:animated:]+332>
              <__51-[UIStatusBar _prepareToSetStyle:animation:forced:]_block_invoke+360>
               <+[UIView(Animation) performWithoutAnimation:]+65>
                <-[UIStatusBar _prepareToSetStyle:animation:forced:]+866>
                 <-[UIStatusBar _requestStyleAttributes:animationParameters:forced:]+391>
                  <-[UIStatusBar requestStyle:animationParameters:forced:]+437>
                   <-[UIStatusBar requestStyle:animated:forced:]+90>
                    <-[UIStatusBar _evaluateServerRegistration]+250>
                     <__45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke+590>
                      <-[UIView(Hierarchy) _postMovedFromSuperview:]+544>
                       <-[UIView(Internal) _addSubview:positioned:relativeTo:]+1967>
                        <-[UIStatusBarWindow setStatusBar:]+288>
                         <-[UIApplication _createStatusBarWithRequestedStyle:orientation:hidden:]+340>
                          <-[UIApplication _runWithMainScene:transitionContext:completion:]+950>
                           <-[UIApplication workspaceDidEndTransaction:]+188>
                            <-[FBSSerialQueue _performNext]+192>
                             <-[FBSSerialQueue _performNextFromRunLoopSource]+45>
                              <__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__+17>
                               <__CFRunLoopDoSources0+556>
                                <__CFRunLoopRun+867>
                                 <CFRunLoopRunSpecific+488>
                                  <-[UIApplication _run]+402>
                                   <UIApplicationMain+171>
                                    <main+117>



Aug  7 14:27:00  <Error>: CGContextTranslateCTM: invalid context 0x0. Backtrace:
      <-[UIStatusBarItemView updateContentsAndWidth]+33>
       <-[UIStatusBarItemView initWithItem:data:actions:style:]+477>
        <+[UIStatusBarItemView createViewForItem:withData:actions:foregroundStyle:]+134>
         <-[UIStatusBarLayoutManager _createViewForItem:withData:actions:]+163>
          <-[UIStatusBarLayoutManager _prepareEnabledItemType:withEnabledItems:withData:actions:itemAppearing:itemDisappearing:]+36
           <-[UIStatusBarLayoutManager prepareEnabledItems:withData:actions:]+92>
            <-[UIStatusBarForegroundView _setStatusBarData:actions:animated:]+797>
             <-[UIStatusBarForegroundView setStatusBarData:actions:animated:]+332>
              <__51-[UIStatusBar _prepareToSetStyle:animation:forced:]_block_invoke+360>
               <+[UIView(Animation) performWithoutAnimation:]+65>
                <-[UIStatusBar _prepareToSetStyle:animation:forced:]+866>
                 <-[UIStatusBar _requestStyleAttributes:animationParameters:forced:]+391>
                  <-[UIStatusBar requestStyle:animationParameters:forced:]+437>
                   <-[UIStatusBar requestStyle:animated:forced:]+90>
                    <-[UIStatusBar _evaluateServerRegistration]+250>
                     <__45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke+590>
                      <-[UIView(Hierarchy) _postMovedFromSuperview:]+544>
                       <-[UIView(Internal) _addSubview:positioned:relativeTo:]+1967>
                        <-[UIStatusBarWindow setStatusBar:]+288>
                         <-[UIApplication _createStatusBarWithRequestedStyle:orientation:hidden:]+340>
                          <-[UIApplication _runWithMainScene:transitionContext:completion:]+950>
                           <-[UIApplication workspaceDidEndTransaction:]+188>
                            <-[FBSSerialQueue _performNext]+192>
                             <-[FBSSerialQueue _performNextFromRunLoopSource]+45>
                              <__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__+17>
                               <__CFRunLoopDoSources0+556>
                                <__CFRunLoopRun+867>
                                 <CFRunLoopRunSpecific+488>
                                  <-[UIApplication _run]+402>
                                   <UIApplicationMain+171>
                                    <main+117>




Aug  7 14:27:00 <Error>: CGContextRestoreGState: invalid context 0x0. Backtrace:
      <-[UIStatusBarItemView updateContentsAndWidth]+33>
       <-[UIStatusBarItemView initWithItem:data:actions:style:]+477>
        <+[UIStatusBarItemView createViewForItem:withData:actions:foregroundStyle:]+134>
         <-[UIStatusBarLayoutManager _createViewForItem:withData:actions:]+163>
          <-[UIStatusBarLayoutManager _prepareEnabledItemType:withEnabledItems:withData:actions:itemAppearing:itemDisappearing:]+36
           <-[UIStatusBarLayoutManager prepareEnabledItems:withData:actions:]+92>
            <-[UIStatusBarForegroundView _setStatusBarData:actions:animated:]+797>
             <-[UIStatusBarForegroundView setStatusBarData:actions:animated:]+332>
              <__51-[UIStatusBar _prepareToSetStyle:animation:forced:]_block_invoke+360>
               <+[UIView(Animation) performWithoutAnimation:]+65>
                <-[UIStatusBar _prepareToSetStyle:animation:forced:]+866>
                 <-[UIStatusBar _requestStyleAttributes:animationParameters:forced:]+391>
                  <-[UIStatusBar requestStyle:animationParameters:forced:]+437>
                   <-[UIStatusBar requestStyle:animated:forced:]+90>
                    <-[UIStatusBar _evaluateServerRegistration]+250>
                     <__45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke+590>
                      <-[UIView(Hierarchy) _postMovedFromSuperview:]+544>
                       <-[UIView(Internal) _addSubview:positioned:relativeTo:]+1967>
                        <-[UIStatusBarWindow setStatusBar:]+288>
                         <-[UIApplication _createStatusBarWithRequestedStyle:orientation:hidden:]+340>
                          <-[UIApplication _runWithMainScene:transitionContext:completion:]+950>
                           <-[UIApplication workspaceDidEndTransaction:]+188>
                            <-[FBSSerialQueue _performNext]+192>
                             <-[FBSSerialQueue _performNextFromRunLoopSource]+45>
                              <__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__+17>
                               <__CFRunLoopDoSources0+556>
                                <__CFRunLoopRun+867>
                                 <CFRunLoopRunSpecific+488>
                                  <-[UIApplication _run]+402>
                                   <UIApplicationMain+171>
                                    <main+117>

4
问题的标题和(已编辑的)问题不匹配。@utogaria给了您原始的正确答案。
Aleksa

Answers:


81

这是9b5中的错误:https://forums.developer.apple.com/thread/13683

向Apple提交雷达。


30
此错误在Xcode 7.0(7A220)中仍然存在。通过创建一个新的空项目并将UIViewControllerBasedStatusBarAppearance设置为info.plist中的NO,可以很容易地重现它。
董事会

13
在上面提到的链接中,Apple员工刚刚回答:“的确,错误消息的根本原因是当应用程序使用某些状态栏类型(例如隐藏)时,iOS出现了问题。”和“您可以忽略此警告。 ”
samthui7 2015年

2
我在iOS 9.2Xcode 7.2
Mohamed Saleh

140

您可以通过以下菜单设置环境变量:产品->方案->编辑方案。在“运行”项下,找到“参数”选项卡,您将在选项卡中看到“环境变量”,添加CG_CONTEXT_SHOW_BACKTRACE并将其值设置为YES。


1
谢谢,这显示了CG上下文的总回溯...事实证明,它与我的按钮无关。.它是UIStatusBarItemView ..
l1ghthouse

3
您是否可以尝试再次检查xib / storyboard文件,以查看是否为自定义的UIButton,UIBarButtonItem等中的任何一个设置了背景图片。如果未正确设置图片(图片文件丢失等),它也可能生成像您一样的警告。
utogaria 2015年

仔细检查..所有图像都正确设置..它们都在Assets.xcassets中,我什至删除了按钮..相同的错误不断出现..
l1ghthouse

1
您可以尝试另一件事。在Xcode中,转到“断点导航器”,然后添加“异常断点”。运行该应用程序,并查看它是否触发任何异常断点。如果是这样,您也许可以更深入地了解发生了什么。
utogaria 2015年

如果可行,那么调试与UI部件相关的错误是一个很好的想法。
Arpit B Parekh

29

Xcode 7会发生此问题。就我而言,我删除了UIViewControllerBasedStatusBarAppearancefrom Info.plist并解决了问题!看到这篇文章的答案:


您的解决方案也对我有用,但是,如果我希望UIStatusbar保持白色怎么办?
swiftBoy 2015年

我认为这不是一个“解决办法”,因为我认为大多数人UIViewControllerBasedStatusBarAppearance只是因为他们需要而设置,但是事实证明我错了,因为这个答案有19个投票:p
superarts.org 2015年

是的,我同意你的看法。我在以下链接中找到了更改状态栏颜色的解决方案:stackoverflow.com/a/32675066/1095530
Weles 2015年

在这里不工作,并且某些人需要在plist中使用此功能,因为不建议使用隐藏状态栏的前一种方法
thibaut noah 2015年

-6

在Xcode 7上:

如果您仍然希望隐藏状态栏,只需UIViewControllerBasedStatusBarAppearanceInfo.plist文件更改为即可View controller-based status bar appearance。别忘了设置NO


2
这没有道理;UIViewControllerBaseStatusBarAppearanceView controller-based status bar appearance相同的东西Info.plist。一个是键值,另一个是用户面对的文本。
esttorhe '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.