Come posso impostare la variabile ambientale CG_CONTEXT_SHOW_BACKTRACE?


90

Ho tre pulsanti a mio avviso. Dopo aver impostato cornerRadus in viewDidLoad (): button.layer.cornerRadius = 20ottengo il seguente messaggio di errore nel registro:

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

Domande:

  • Come posso impostare la variabile ambientale CG_CONTEXT_SHOW_BACKTRACE?
  • O come posso correggere questo avviso?

Ok, ora ho il backtrace dal messaggio. Non ha alcun senso per me. Un po 'di aiuto per favore ...

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
Il titolo della domanda e la domanda (modificata) non corrispondono. @utogaria ti ha dato la risposta originale corretta.
Aleksa

Risposte:


81

È un bug in 9b5:
https://forums.developer.apple.com/thread/13683

Presenta un RADAR con Apple.


30
Questo bug esiste ancora in Xcode 7.0 (7A220). È facilmente riproducibile creando un nuovo progetto vuoto e impostando UIViewControllerBasedStatusBarAppearance su NO in info.plist.
Board il

13
Nel collegamento citato sopra, uno staff Apple ha appena risposto: "In effetti, la causa principale dei messaggi di errore è un problema con iOS quando un'app utilizza alcuni tipi di barra di stato, come nascosta." E "Puoi ignorare questo avviso. "
samthui7

2
Osservo lo stesso problema sotto iOS 9.2eXcode 7.2
Mohamed Saleh

140

È possibile impostare una variabile ambientale tramite questo menu: Prodotto -> Schema -> Modifica schema. Sotto la voce "Esegui", individua la scheda "Argomenti", vedrai "Variabili ambientali" nella scheda, Aggiungi CG_CONTEXT_SHOW_BACKTRACEe imposta il suo valore su SÌ.


1
Grazie, questo mostra il backtrace totale di CG Context ... Si scopre che non ha nulla da fare con i miei pulsanti .. è UIStatusBarItemView ..
l1ghthouse

3
Potresti provare a ricontrollare il tuo file xib / storyboard e vedere se c'è qualche immagine di sfondo impostata per uno qualsiasi degli UIButton personalizzati, UIBarButtonItem, ecc. Se l'immagine non è impostata correttamente (file immagine mancante, ecc.), Potrebbe anche generare avvertimenti come te.
utogaria

Doppio controllo .. tutte le immagini sono impostate correttamente .. sono tutte in Assets.xcassets Ho anche rimosso i pulsanti .. lo stesso errore continua a comparire ..
l1ghthouse

1
C'è un'altra cosa che puoi provare. In Xcode, vai su "breakpoint navigator" e aggiungi un "breakpoint di eccezione". Esegui l'app e verifica se attiva un punto di interruzione dell'eccezione. In tal caso, potresti essere in grado di vedere più a fondo cosa succede.
utogaria

Se funziona, è un'ottima idea per eseguire il debug dell'errore relativo alle parti dell'interfaccia utente.
Arpit B Parekh

29

Questo problema si verifica con Xcode 7. Nel mio caso ho rimosso UIViewControllerBasedStatusBarAppearanceda Info.pliste il problema è stato risolto! Vedi la risposta in questo post :


la tua soluzione ha funzionato anche per me, tuttavia, cosa succede se voglio che l'UIStatusbar rimanga bianca?
swiftBoy

Non lo considererei una "correzione" poiché pensavo che la maggior parte delle persone che impostano UIViewControllerBasedStatusBarAppearancesolo perché ne avevano bisogno, ma ho scoperto che mi sbagliavo poiché questa risposta ha 19 voti positivi: p
superarts.org

Si sono d'accordo con te. Ho trovato la soluzione per il colore della barra di stato il cambiamento in questo link: stackoverflow.com/a/32675066/1095530
Weles

Non funziona qui, e alcune persone ne hanno bisogno nel plist poiché il modo precedente per nascondere la barra di stato è ora deprecato
thibaut noah

-6

Su Xcode 7:

Nel caso in cui desideri ancora che la barra di stato sia nascosta, cambia semplicemente UIViewControllerBasedStatusBarAppearanceil Info.plistfile in View controller-based status bar appearance. Non dimenticare di impostarloNO


2
Questo non ha senso; UIViewControllerBaseStatusBarAppearancee View controller-based status bar appearancesono la stessa cosa su Info.plist. Uno è il valore chiave e l'altro il testo di fronte all'utente.
esttorhe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.