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>

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.


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.


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 :


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.