Як я можу встановити змінну середовища 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>

4
Заголовок питання та (відредаговане) невідповідність запитання. @utogaria дав вам оригінальну правильну відповідь.
Aleksa

Відповіді:


81

Це помилка в 9b5:
https://forums.developer.apple.com/thread/13683

Подайте РАДАР в 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 та встановіть для нього значення YES.


1
Дякую, це показує загальну зворотну відстеження контексту CG ... Виявляється, у нього немає нічого спільного з моїми кнопками .. це UIStatusBarItemView ..
l1ghthouse

3
Чи не можете ви спробувати ще раз перевірити файл xib / раскадровки та перевірити, чи встановлено фонове зображення для будь-якого з налаштованих UIButton, UIBarButtonItem тощо. Якщо зображення неправильно встановлене (файл зображення відсутній тощо), воно також може генерувати попередження, як у вас.
utogaria

Подвійна перевірка .. всі зображення налаштовані правильно .. всі вони знаходяться в Assets.xcassets. Я навіть кнопки видалив ..
Постійно

1
Можна спробувати ще щось. У Xcode перейдіть до "навігатора точки зупинку" та додайте "Точку зупинки винятків". Запустіть програму та перевірте, чи не ініціює вона будь-яку точку зупинки винятків. Якщо так, можливо, ви зможете глибше побачити, що відбувається.
utogaria

Якщо це працює, це дуже гарна думка для налагодження помилки, пов’язаної з частинами інтерфейсу користувача.
Arpit B Parekh

29

Ця проблема відбувається з Xcode 7. У моєму випадку я видалив UIViewControllerBasedStatusBarAppearanceвід Info.plistі проблема вирішена! Дивіться відповідь у цьому дописі :


ваше рішення спрацювало і на мене, однак, що, якщо я хочу, щоб UIStatusbar залишався білим?
swiftBoy

Я не вважав би це "виправленням", оскільки думав, що більшість людей встановлюють UIViewControllerBasedStatusBarAppearanceлише тому, що їм це потрібно, але виявилося, що я помилився, оскільки ця відповідь має 19 голосів "за": p
superarts.org

Так, я з вами згоден. Я знайшов рішення змінити колір рядка стану за цим посиланням: stackoverflow.com/a/32675066/1095530
Велес

Тут не працює, і деяким людям це потрібно в списку, оскільки попередній спосіб приховати рядок стану вже застарілий
Тібо Ной,

-6

На Xcode 7:

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


2
Це не має сенсу; UIViewControllerBaseStatusBarAppearanceі View controller-based status bar appearanceте саме на Info.plist. Одне - це ключове значення, а друге - текст, перед яким стоїть користувач.
esttorhe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.