Bagaimana cara mengatur variabel lingkungan CG_CONTEXT_SHOW_BACKTRACE?

90

Saya memiliki tiga tombol dalam pandangan saya. Setelah mengatur cornerRadus di viewDidLoad (): button.layer.cornerRadius = 20Saya mendapatkan pesan kesalahan berikut di log:

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

Pertanyaan:

  • Bagaimana cara mengatur variabel lingkungan CG_CONTEXT_SHOW_BACKTRACE?
  • Atau bagaimana cara memperbaiki peringatan ini?

Oke, sekarang saya sudah menelusuri kembali pesannya. Itu tidak masuk akal bagiku. Tolong bantu ...

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>
mercusuar 16
sumber
4
Judul pertanyaan dan pertanyaan (diedit) tidak cocok. @utogaria memberi Anda jawaban asli yang benar.
Aleksa

Jawaban:

81

Ini bug di 9b5:
https://forums.developer.apple.com/thread/13683

Ajukan RADAR dengan Apple.

Greg Robertson
sumber
30
Bug ini masih ada di Xcode 7.0 (7A220). Ini mudah direproduksi dengan membuat proyek kosong baru dan menyetel UIViewControllerBasedStatusBarAppearance ke NO di info.plist.
Dewan
13
Di tautan yang disebutkan di atas, staf Apple baru saja menjawab: "Memang, akar penyebab pesan kesalahan adalah masalah dengan iOS saat aplikasi menggunakan beberapa jenis bilah status, seperti tersembunyi.", Dan "Anda dapat mengabaikan peringatan ini. "
samthui7
2
Saya mengamati masalah yang sama di bawah iOS 9.2danXcode 7.2
Mohamed Saleh
140

Anda dapat mengatur variabel lingkungan melalui menu ini: Produk -> Skema -> Edit Skema. Di bawah item "Jalankan", cari tab "Argumen", Anda akan melihat "Variabel Lingkungan" di tab, Tambah CG_CONTEXT_SHOW_BACKTRACEdan setel nilainya ke YA.

utogaria
sumber
1
Terima kasih ini menunjukkan total penelusuran balik dari Konteks CG ... Ternyata, tidak ada hubungannya dengan tombol saya .. ini adalah UIStatusBarItemView ..
mercusuar16
3
Bisakah Anda mencoba memeriksa ulang file xib / storyboard Anda dan melihat apakah ada gambar latar belakang yang disetel untuk salah satu UIButton yang disesuaikan, UIBarButtonItem, dll. Jika gambar tidak disetel dengan benar (file gambar hilang, dll), itu juga bisa menghasilkan peringatan seperti yang Anda miliki.
utogaria
Diperiksa dua kali .. semua gambar diatur dengan benar .. semuanya ada di Assets.xcassets Saya bahkan menghapus tombol .. kesalahan yang sama terus muncul ..
mercusuar16
1
Ada hal lain yang bisa Anda coba. Di Xcode, buka "breakpoint navigator", dan tambahkan "Exception breakpoint". Jalankan aplikasi, dan lihat apakah itu memicu breakpoint pengecualian apa pun. Jika demikian, Anda mungkin bisa melihat lebih dalam apa yang terjadi.
utogaria
Jika berhasil maka itu adalah pemikiran yang sangat baik untuk men-debug kesalahan yang terkait dengan, bagian UI.
Arpit B Parekh
29

Masalah ini terjadi dengan Xcode 7. Dalam kasus saya, saya menghapus UIViewControllerBasedStatusBarAppearancedari Info.plistdan masalah terpecahkan! Lihat jawabannya di postingan ini :

Weles
sumber
solusi Anda juga berhasil untuk saya, namun, bagaimana jika saya ingin UIStatusbar tetap putih?
swiftBoy
Saya tidak akan menganggap ini sebagai "perbaikan" karena saya pikir kebanyakan orang yang menetapkan UIViewControllerBasedStatusBarAppearancehanya karena mereka membutuhkannya, tetapi ternyata saya salah karena jawaban ini memiliki 19
suara positif
Ya aku setuju denganmu. Saya menemukan solusi untuk mengubah warna bilah status di tautan ini: stackoverflow.com/a/32675066/1095530
Weles
Tidak berfungsi di sini, dan beberapa orang memerlukan ini di plist karena cara sebelumnya untuk menyembunyikan bilah status sekarang sudah tidak digunakan lagi
thibaut noah
-6

Di Xcode 7:

Dalam kasus Anda masih ingin status bar tersembunyi, hanya mengubah UIViewControllerBasedStatusBarAppearancedalam Info.plistfile ke View controller-based status bar appearance. Jangan lupa untuk mengaturnyaNO

Nghia Luong
sumber
2
Ini tidak masuk akal; UIViewControllerBaseStatusBarAppearancedan View controller-based status bar appearancehal yang sama di Info.plist. Salah satunya adalah nilai kunci dan yang lainnya adalah teks yang berhadapan dengan pengguna.
esttorhe