Como posso definir a variável ambiental CG_CONTEXT_SHOW_BACKTRACE?

90

Eu tenho três botões em minha visão. Depois de definir o cornerRadus no viewDidLoad (): button.layer.cornerRadius = 20Recebo a seguinte mensagem de erro no log:

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

Questões:

  • Como posso definir a variável ambiental CG_CONTEXT_SHOW_BACKTRACE?
  • Ou como posso corrigir esse aviso?

Ok, eu tenho o backtrace agora da mensagem. Não faz sentido para mim. Alguma ajuda 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
fonte
4
O título da pergunta e a pergunta (editada) não correspondem. @utogaria deu a você a resposta original correta.
Aleksa,

Respostas:

81

É um bug no 9b5:
https://forums.developer.apple.com/thread/13683

Arquive um RADAR com a Apple.

Greg Robertson
fonte
30
Este bug ainda existe no Xcode 7.0 (7A220). É facilmente reproduzível criando um novo projeto vazio e definindo UIViewControllerBasedStatusBarAppearance como NO em info.plist.
Diretoria de
13
No link mencionado acima, uma equipe da Apple respondeu: "Na verdade, a causa raiz das mensagens de erro é um problema com o iOS quando um aplicativo usa alguns tipos de barra de status, como oculto." E "Você pode ignorar este aviso. "
samthui7,
2
Observo o mesmo problema sob iOS 9.2eXcode 7.2
Mohamed Saleh
140

Você pode definir uma variável ambiental por meio deste menu: Produto -> Esquema -> Editar Esquema. No item "Executar", localize a guia "Argumentos", você verá "Variáveis ​​ambientais" na guia Adicionar CG_CONTEXT_SHOW_BACKTRACEe definir seu valor como SIM.

utogaria
fonte
1
Obrigado, isso mostra o backtrace total do contexto CG ... Acontece que não tem nada a ver com meus botões .. é o UIStatusBarItemView ..
l1ghthouse
3
Você poderia tentar verificar seu arquivo xib / storyboard e ver se há alguma imagem de fundo definida para algum UIButton, UIBarButtonItem personalizado, etc. Se a imagem não estiver configurada corretamente (arquivo de imagem ausente, etc), ele também pode gerar avisos como você.
utogaria de
Verifiquei duas vezes .. todas as imagens estão configuradas corretamente .. elas estão todas nos Assets.xcassets Eu até removi os botões .. mesmo erro continua aparecendo ..
l1ghthouse
1
Há outra coisa que você pode tentar. No Xcode, vá em "breakpoint navigator" e adicione um "breakpoint de exceção". Execute o aplicativo e veja se ele dispara algum ponto de interrupção de exceção. Nesse caso, você poderá ver mais profundamente o que acontece.
utogaria de
Se funcionar, é uma boa ideia depurar o erro relacionado às partes da IU.
Arpit B Parekh
29

Esse problema acontece com o Xcode 7. No meu caso, removi o UIViewControllerBasedStatusBarAppearancede Info.pliste o problema resolvido! Veja a resposta nesta postagem :

Weles
fonte
sua solução funcionou para mim também, no entanto, e se eu quiser que o UIStatusbar permaneça branco?
swiftBoy
Eu não consideraria isso um "conserto", pois achei que a maioria das pessoas UIViewControllerBasedStatusBarAppearance
definia
Sim, eu concordo com você. Encontrei a solução para mudar a cor da barra de status neste link: stackoverflow.com/a/32675066/1095530
Weles
Não estou trabalhando aqui, e algumas pessoas precisam disso no plist, já que a forma anterior de ocultar a barra de status agora está obsoleta
thibaut noah
-6

No Xcode 7:

Caso você ainda queira que a barra de status fique oculta, basta alterar UIViewControllerBasedStatusBarAppearanceo Info.plistarquivo para View controller-based status bar appearance. Não se esqueça de configurá-lo porNO

Nghia Luong
fonte
2
Isso não faz sentido; UIViewControllerBaseStatusBarAppearancee View controller-based status bar appearancesão a mesma coisa no Info.plist. Um é o valor-chave e o outro o texto voltado para o usuário.
esttorhe