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>
l1ghthouse
la source
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.

Greg Robertson
la source
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.

utogaria
la source
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 :

Weles
la source
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

Nghia Luong
la source
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