如何设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量?

Posted

技术标签:

【中文标题】如何设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量?【英文标题】:How can I set CG_CONTEXT_SHOW_BACKTRACE environmental variable? 【发布时间】:2015-10-30 14:22:03 【问题描述】:

我的视图中有三个按钮。在 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.

问题:

或者我该如何解决这个警告?

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

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>

【问题讨论】:

问题的标题和(编辑的)问题不匹配。 @utogaria 给了你原来的正确答案。 【参考方案1】:

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

【讨论】:

谢谢,这显示了 CG Context 的总回溯......原来,它与我的按钮无关......它是 UIStatusBarItemView.. 您能否尝试再次检查您的 xib/storyboard 文件,看看是否为任何自定义 UIButton、UIBarButtonItem 等设置了任何背景图像。如果图像设置不正确(图像文件丢失等),它也可能像你一样产生警告。 双重检查..所有图像设置正确..它们都在 Assets.xcassets 我什至删除了按钮..同样的错误不断出现.. 您可以尝试另一件事。在 Xcode 中,转到“断点导航器”,然后添加一个“异常断点”。运行应用程序,看看它是否触发了任何异常断点。如果是这样,您也许能够更深入地了解发生了什么。 如果它工作,那么它是调试与UI部分相关的错误的一个很好的想法。【参考方案2】:

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

向 Apple 提交 RADAR。

【讨论】:

Xcode 7.0 (7A220) 中仍然存在这个错误。通过创建一个新的空项目并在 info.plist 中将 UIViewControllerBasedStatusBarAppearance 设置为 NO 可以轻松重现。 在上面提到的链接中,一位苹果工作人员刚刚回答:“确实,错误消息的根本原因是ios应用程序使用某些状态栏类型时出现的问题,例如隐藏。”,和“你可以忽略这个警告。” 我在iOS 9.2Xcode 7.2 下观察到同样的问题【参考方案3】:

这个问题发生在 Xcode 7 上。在我的例子中,我从 Info.plist 中删除了 UIViewControllerBasedStatusBarAppearance,问题就解决了!请参阅此post 中的答案:

【讨论】:

您的解决方案也对我有用,但是,如果我希望 UIStatusbar 保持白色怎么办? 我不认为这是一个“修复”,因为我认为大多数设置 UIViewControllerBasedStatusBarAppearance 的人只是因为他们需要它,但结果我错了,因为这个答案有 19 个赞成票:p跨度> 是的,我同意你的看法。我在此链接中找到了更改状态栏颜色的解决方案:***.com/a/32675066/1095530 这里不工作,有些人在 plist 中需要这个,因为以前隐藏状态栏的方法现在已弃用【参考方案4】:

在 Xcode 7 上:

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

【讨论】:

这没有意义; UIViewControllerBaseStatusBarAppearanceView controller-based status bar appearanceInfo.plist 上是同一个东西。一个是键值,另一个是面向用户的文本。

以上是关于如何设置 CG_CONTEXT_SHOW_BACKTRACE 环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置div铺满

如何进入电脑BIOS设置?

如何设置窗口在最前面?

自己购买的域名如何设置子域名,如何设置访问多个项目,万网

outlook如何设置自动回复

如何设置默认字体功能设置?