¿Cómo puedo configurar la variable de entorno CG_CONTEXT_SHOW_BACKTRACE?

90

Tengo tres botones en mi vista. Después de configurar cornerRadus en viewDidLoad (): aparece button.layer.cornerRadius = 20el siguiente mensaje de error en el registro:

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

Preguntas:

  • ¿Cómo puedo configurar la variable de entorno CG_CONTEXT_SHOW_BACKTRACE?
  • ¿O cómo puedo solucionar esta advertencia?

Bien, tengo el rastro de retroceso ahora del mensaje. No tiene ningún sentido para mí. Un poco de ayuda por favor ...

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
fuente
4
El título de la pregunta y la pregunta (editada) no coinciden. @utogaria te dio la respuesta correcta original.
Aleksa

Respuestas:

81

Es un error en 9b5:
https://forums.developer.apple.com/thread/13683

Presentar un RADAR con Apple.

Greg Robertson
fuente
30
Este error todavía existe en Xcode 7.0 (7A220). Es fácilmente reproducible creando un nuevo proyecto vacío y configurando UIViewControllerBasedStatusBarAppearance en NO en info.plist.
Junta
13
En el enlace mencionado anteriormente, un miembro del personal de Apple acaba de responder: "De hecho, la causa principal de los mensajes de error es un problema con iOS cuando una aplicación usa algunos tipos de barra de estado, como oculta" y "Puede ignorar esta advertencia. "
samthui7
2
Observo el mismo problema en iOS 9.2yXcode 7.2
Mohamed Saleh
140

Puede configurar una variable ambiental a través de este menú: Producto -> Esquema -> Editar esquema. En el elemento "Ejecutar", ubique la pestaña "Argumentos", verá "Variables ambientales" en la pestaña, Agregar CG_CONTEXT_SHOW_BACKTRACEy establecer su valor en SÍ.

utogaria
fuente
1
Gracias, esto muestra el rastro total de CG Context ... Resulta que no tiene nada que ver con mis botones ... es UIStatusBarItemView ..
l1ghthouse
3
¿Podría intentar verificar su archivo xib / storyboard y ver si hay alguna imagen de fondo configurada para cualquiera de los UIButton, UIBarButtonItem, etc. personalizados? Si la imagen no está configurada correctamente (falta el archivo de imagen, etc.), también podría generar advertencias como tú.
utogaria
Comprobado dos veces ... todas las imágenes están configuradas correctamente ... todas están en los Assets.xcassets Incluso eliminé los botones ... el mismo error sigue apareciendo ..
l1ghthouse
1
Hay otra cosa que puedes probar. En Xcode, vaya a "navegador de punto de interrupción" y agregue un "punto de interrupción de excepción". Ejecute la aplicación y vea si activa algún punto de interrupción de excepción. Si es así, es posible que pueda ver más profundamente lo que sucede.
utogaria
Si funciona, es una buena idea para depurar el error relacionado con las partes de la interfaz de usuario.
Arpit B Parekh
29

Este problema ocurre con Xcode 7. En mi caso me quita el UIViewControllerBasedStatusBarAppearancede Info.plisty el problema resuelto! Vea la respuesta en esta publicación :

Weles
fuente
su solución también funcionó para mí, sin embargo, ¿qué pasa si quiero que la barra UIStatusbar permanezca blanca?
swiftBoy
No consideraría que es una "solución" ya que pensé que la mayoría de las personas que se establecen UIViewControllerBasedStatusBarAppearancesolo porque lo necesitan, pero resultó que estaba equivocado ya que esta respuesta tiene 19 votos a favor: p
superarts.org
Sí estoy de acuerdo con usted. Encontré la solución para cambiar el color de la barra de estado en este enlace: stackoverflow.com/a/32675066/1095530
Weles
No funciona aquí, y algunas personas necesitan esto en el plist ya que la forma anterior de ocultar la barra de estado ahora está en desuso
thibaut noah
-6

En Xcode 7:

En caso de que aún desee que la barra de estado esté oculta, simplemente cambie UIViewControllerBasedStatusBarAppearanceel Info.plistarchivo a View controller-based status bar appearance. No olvide configurarloNO

Nghia Luong
fuente
2
Esto no tiene sentido; UIViewControllerBaseStatusBarAppearancey View controller-based status bar appearanceson lo mismo en el Info.plist. Uno es el valor clave y el otro el texto de cara al usuario.
esttorhe