Comment définir la variable d'environnement CG_CONTEXT_SHOW_BACKTRACE?


90

J'ai trois boutons dans ma vue. Après avoir défini cornerRadus dans viewDidLoad (): button.layer.cornerRadius = 20j'obtiens le message d'erreur suivant dans le journal:

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

Des questions:

  • Comment définir la variable d'environnement CG_CONTEXT_SHOW_BACKTRACE?
  • Ou comment puis-je corriger cet avertissement?

D'accord, j'ai maintenant la trace du message. Cela n'a aucun sens pour moi. Un peu d'aide s'il vous plaît ...

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
Le titre de la question et la non-concordance de la question (modifiée). @utogaria vous a donné la bonne réponse originale.
Aleksa

Réponses:


81

C'est un bug dans 9b5:
https://forums.developer.apple.com/thread/13683

Déposer un RADAR avec Apple.


30
Ce bogue existe toujours dans Xcode 7.0 (7A220). Il est facilement reproductible en créant un nouveau projet vide et en définissant UIViewControllerBasedStatusBarAppearance sur NO dans info.plist.
Conseil du

13
Dans le lien mentionné ci-dessus, un membre du personnel Apple vient de répondre: "En effet, la cause première des messages d'erreur est un problème avec iOS lorsqu'une application utilise certains types de barres d'état, comme masqué." Et "Vous pouvez ignorer cet avertissement. "
samthui7

2
J'observe le même problème sous iOS 9.2etXcode 7.2
Mohamed Saleh

140

Vous pouvez définir une variable d'environnement via ce menu: Produit -> Schéma -> Modifier le schéma. Sous l'élément "Exécuter", recherchez l'onglet "Arguments", vous verrez "Variables d'environnement" dans l'onglet, Ajouter CG_CONTEXT_SHOW_BACKTRACEet définir sa valeur sur OUI.


1
Merci cela montre la trace totale de CG Context ... Il s'avère qu'il n'a rien à voir avec mes boutons .. c'est le UIStatusBarItemView ..
l1ghthouse

3
Pourriez-vous essayer de vérifier dans votre fichier xib / storyboard et voir s'il y a une image d'arrière-plan définie pour l'un des UIButton personnalisé, UIBarButtonItem, etc. Si l'image n'est pas correctement définie (fichier image manquant, etc.), elle pourrait également générer avertissements comme vous.
utogaria

Double vérifié .. toutes les images sont configurées correctement .. elles sont toutes dans Assets.xcassets J'ai même supprimé les boutons .. la même erreur continue d'apparaître ..
l1ghthouse

1
Il y a une autre chose que vous pouvez essayer. Dans Xcode, allez dans «navigateur de point d'arrêt», et ajoutez un «point d'arrêt d'exception». Exécutez l'application et voyez si elle déclenche un point d'arrêt d'exception. Si tel est le cas, vous pourrez peut-être voir plus profondément ce qui se passe.
utogaria

Si cela fonctionne, c'est une très bonne idée pour déboguer l'erreur liée aux parties de l'interface utilisateur.
Arpit B Parekh

29

Ce problème se produit avec Xcode 7. Dans mon cas, j'ai supprimé le UIViewControllerBasedStatusBarAppearancede Info.plistet le problème est résolu! Voir la réponse dans cet article :


votre solution a fonctionné pour moi aussi, mais que faire si je veux que la barre UIStatusbar reste blanche?
swiftBoy

Je ne considérerais pas que ce soit une "solution" car je pensais que la plupart des gens qui se sont installés UIViewControllerBasedStatusBarAppearanceuniquement parce qu'ils en avaient besoin, mais il s'est avéré que j'avais tort puisque cette réponse a 19 votes positifs: p
superarts.org

Oui je suis d'accord avec toi. J'ai trouvé la solution pour changer la couleur de la barre d'état dans ce lien: stackoverflow.com/a/32675066/1095530
Weles

Ne fonctionne pas ici, et certaines personnes en ont besoin dans le plist car l'ancienne façon de masquer la barre d'état est désormais obsolète
thibaut noah

-6

Sur Xcode 7:

Si vous souhaitez toujours que la barre d'état soit masquée, changez simplement UIViewControllerBasedStatusBarAppearancele Info.plistfichier en View controller-based status bar appearance. N'oubliez pas de le régler parNO


2
Cela n'a pas de sens; UIViewControllerBaseStatusBarAppearanceet View controller-based status bar appearancesont la même chose sur le Info.plist. L'un est la valeur clé et l'autre le texte face à l'utilisateur.
esttorhe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.