Как установить переменную окружения CG_CONTEXT_SHOW_BACKTRACE?

90

У меня на поле зрения три кнопки. После установки cornerRadus в viewDidLoad (): 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>
маяк16
источник
4
Несоответствие заголовка вопроса и (отредактированного) вопроса. @utogaria дала вам оригинальный правильный ответ.
Aleksa

Ответы:

81

Это ошибка в 9b5:
https://forums.developer.apple.com/thread/13683

Отправьте RADAR в Apple.

Грег Робертсон
источник
30
Эта ошибка все еще существует в Xcode 7.0 (7A220). Его легко воспроизвести, создав новый пустой проект и установив для UIViewControllerBasedStatusBarAppearance значение NO в info.plist.
борт
13
В упомянутой выше ссылке сотрудники Apple только что ответили: «Действительно, основной причиной сообщений об ошибках является проблема с iOS, когда приложение использует некоторые типы строки состояния, такие как скрытые» и «Вы можете проигнорировать это предупреждение. "
samthui7
2
Я наблюдаю тот же вопрос в рамках iOS 9.2иXcode 7.2
Мохамед Салех
140

Вы можете установить переменную среды через это меню: Продукт -> Схема -> Редактировать схему. Под элементом «Выполнить» найдите вкладку «Аргументы», вы увидите на вкладке «Переменные среды», добавьте CG_CONTEXT_SHOW_BACKTRACEи установите для него значение ДА.

утогария
источник
1
Благодаря это показывает общая трассировка из CG контекста ... Оказывается, это не имеет ничего не сделать с моими кнопками .. это UIStatusBarItemView ..
lighthouse16
3
Не могли бы вы попробовать дважды проверить свой файл xib / раскадровки и посмотреть, есть ли какое-либо фоновое изображение, установленное для любого из настроенных UIButton, UIBarButtonItem и т. Д. Если изображение настроено неправильно (файл изображения отсутствует и т. Д.), Он также может сгенерировать предупреждения, как у вас.
utogaria
Дважды проверил .. все изображения установлен правильно .. они все в Assets.xcassets я даже удалила кнопки .. та же ошибка продолжает появляться ..
lighthouse16
1
Есть еще кое-что, что вы можете попробовать. В Xcode перейдите в «навигатор точек останова» и добавьте «Исключительную точку останова». Запустите приложение и посмотрите, не вызывает ли оно точку останова по исключению. Если да, то вы сможете глубже увидеть, что происходит.
utogaria
Если это работает, то это очень хороший способ отладки ошибок, связанных с частями пользовательского интерфейса.
Arpit B Parekh
29

Эта проблема возникает с Xcode 7. В моем случае я удалил UIViewControllerBasedStatusBarAppearanceиз, Info.plistи проблема решена! Смотрите ответ в этом посте :

Велес
источник
ваше решение тоже сработало для меня, но что, если я хочу, чтобы UIStatusbar оставался белым?
swiftBoy
Я бы не стал считать это «исправлением», так как думал, что большинство людей устанавливают UIViewControllerBasedStatusBarAppearanceтолько потому, что им это нужно, но оказалось, что я ошибался, так как этот ответ набрал 19 голосов: p
superarts.org
Да, я согласен с вами. Я нашел решение для изменения цвета строки состояния по этой ссылке: stackoverflow.com/a/32675066/1095530
Weles
Здесь не работает, и некоторым людям это нужно в списке, так как прежний способ скрытия строки состояния теперь устарел
thibaut noah
-6

В Xcode 7:

В случае , если вы все еще хотите , строка состояния скрыта, просто измените UIViewControllerBasedStatusBarAppearanceв Info.plistфайле в View controller-based status bar appearance. Не забудьте установить этоNO

Нгиа Луонг
источник
2
В этом нет смысла; UIViewControllerBaseStatusBarAppearanceи View controller-based status bar appearanceто же самое на Info.plist. Один - это ключевое значение, а другой - текст, с которым сталкивается пользователь.
esttorhe