Jak mogę ustawić zmienną środowiskową CG_CONTEXT_SHOW_BACKTRACE?

90

Widzę trzy przyciski. Po ustawieniu cornerRadus w viewDidLoad (): button.layer.cornerRadius = 20W logu pojawia się następujący komunikat o błędzie:

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

Pytania:

  • Jak mogę ustawić zmienną środowiskową CG_CONTEXT_SHOW_BACKTRACE?
  • Albo jak mogę naprawić to ostrzeżenie?

OK, mam teraz ślad z wiadomości. Nie ma to dla mnie żadnego sensu. Proszę o pomoc ...

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>
l1ghthouse
źródło
4
Tytuł pytania i (edytowane) pytanie są niezgodne. @utogaria udzielił oryginalnej, poprawnej odpowiedzi.
Aleksa

Odpowiedzi:

81

To błąd w 9b5:
https://forums.developer.apple.com/thread/13683

Prześlij RADAR do Apple.

Greg Robertson
źródło
30
Ten błąd nadal istnieje w Xcode 7.0 (7A220). Można go łatwo odtworzyć, tworząc nowy pusty projekt i ustawiając UIViewControllerBasedStatusBarAppearance na NO w info.plist.
Zarząd
13
We wspomnianym odnośniku powyżej pracownik Apple właśnie odpowiedział: „Rzeczywiście, główną przyczyną komunikatów o błędach jest problem z iOS, gdy aplikacja korzysta z niektórych typów paska stanu, takich jak ukryty.” I „Możesz zignorować to ostrzeżenie. "
samthui7,
2
Obserwuję ten sam problem pod iOS 9.2iXcode 7.2
Mohamed Saleh
140

Możesz ustawić zmienną środowiskową za pomocą tego menu: Produkt -> Schemat -> Edytuj schemat. W elemencie „Uruchom” znajdź zakładkę „Argumenty”, zobaczysz na karcie „Zmienne środowiskowe”, Dodaj CG_CONTEXT_SHOW_BACKTRACEi ustaw jego wartość na TAK.

utogaria
źródło
1
Dzięki temu pokazuje całkowity ślad wstecznego kontekstu CG ... Okazuje się, że nie ma nic do zrobienia z moimi przyciskami .. to jest UIStatusBarItemView ..
l1ghthouse
3
Czy możesz spróbować dwukrotnie sprawdzić plik xib / storyboard i sprawdzić, czy jest ustawiony obraz tła dla dowolnego niestandardowego UIButton, UIBarButtonItem itp. Jeśli obraz nie jest poprawnie ustawiony (brak pliku obrazu itp.), Może również wygenerować ostrzeżenia, takie jak ty.
utogaria
Dwukrotnie sprawdzane .. wszystkie zdjęcia są ustawione prawidłowo .. wszystkie są w Assets.xcassets nawet usunięte przycisków .. sam błąd się pojawia ..
l1ghthouse
1
Możesz spróbować jeszcze jednej rzeczy. W Xcode przejdź do „nawigatora punktów przerwania” i dodaj „punkt przerwania wyjątku”. Uruchom aplikację i sprawdź, czy wyzwala dowolny punkt przerwania wyjątku. Jeśli tak, możesz dokładniej zobaczyć, co się dzieje.
utogaria
Jeśli to działa, to bardzo dobrze jest pomyśleć o debugowaniu błędu związanego z częściami interfejsu użytkownika.
Arpit B Parekh
29

Ten problem występuje z Xcode 7. W moim przypadku usunąłem UIViewControllerBasedStatusBarAppearancez Info.plisti problem został rozwiązany! Zobacz odpowiedź w tym poście :

Weles
źródło
Twoje rozwiązanie zadziałało również dla mnie, ale co jeśli chcę, aby pasek UIStatusbar pozostał biały?
swiftBoy
Nie uważałbym tego za "poprawkę", ponieważ myślałem, że większość ludzi, którzy ustawiają UIViewControllerBasedStatusBarAppearancetylko dlatego, że tego potrzebują, ale okazało się, że się myliłem, ponieważ ta odpowiedź ma 19 głosów: p
superarts.org
Tak, zgadzam się z tobą. Znalazłem rozwiązanie, aby zmienić kolor paska stanu w tym linku: stackoverflow.com/a/32675066/1095530
Weles
Nie działa tutaj, a niektórzy ludzie potrzebują tego w plistie, ponieważ poprzedni sposób ukrywania paska stanu jest teraz przestarzały
thibaut noah
-6

W Xcode 7:

W przypadku nadal chcesz pasek stanu jest ukryty, wystarczy zmienić UIViewControllerBasedStatusBarAppearancew Info.plistpliku do View controller-based status bar appearance. Nie zapomnij go ustawićNO

Nghia Luong
źródło
2
To nie ma sensu; UIViewControllerBaseStatusBarAppearancei View controller-based status bar appearancesą tym samym na Info.plist. Jedna to wartość kluczowa, a druga to tekst widoczny dla użytkownika.
esttorhe