ฉันจะตั้งค่าตัวแปรสภาพแวดล้อม CG_CONTEXT_SHOW_BACKTRACE ได้อย่างไร


90

ฉันมีปุ่มสามปุ่มในมุมมองของฉัน หลังจากตั้งค่า cornerRadus ใน viewDidLoad ():button.layer.cornerRadius = 20ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้ในบันทึก:

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

คำถาม:

  • ฉันจะตั้งค่าตัวแปรสภาพแวดล้อม CG_CONTEXT_SHOW_BACKTRACE ได้อย่างไร
  • หรือจะแก้ไขคำเตือนนี้ได้อย่างไร?

โอเคฉันได้รับการติดตามย้อนหลังแล้วจากข้อความ มันไม่สมเหตุสมผลกับฉันเลย ช่วยกรุณา ...

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
ชื่อคำถามและคำถาม (แก้ไข) ไม่ตรงกัน @utogaria ให้คำตอบที่ถูกต้องแก่คุณ
Aleksa

คำตอบ:


81

เป็นบั๊กใน 9b5:
https://forums.developer.apple.com/thread/13683

ยื่น RADAR กับ Apple


30
ข้อบกพร่องนี้ยังคงมีอยู่ใน Xcode 7.0 (7A220) สามารถทำซ้ำได้อย่างง่ายดายโดยการสร้างโปรเจ็กต์เปล่าใหม่และตั้งค่า UIViewControllerBasedStatusBarAppearance เป็น NO ใน info.plist
บอร์ด

13
ในลิงก์ดังกล่าวข้างต้นเจ้าหน้าที่ของ Apple ตอบว่า: "อันที่จริงสาเหตุของข้อความแสดงข้อผิดพลาดคือปัญหากับ iOS เมื่อแอปใช้แถบสถานะบางประเภทเช่นซ่อนไว้" และ "คุณอาจเพิกเฉยต่อคำเตือนนี้ "
samthui7

2
ฉันสังเกตปัญหาเดียวกันภายใต้iOS 9.2และXcode 7.2
Mohamed Saleh

140

คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมผ่านเมนูนี้: ผลิตภัณฑ์ -> โครงการ -> แก้ไขโครงการ ใต้รายการ "เรียกใช้" ค้นหาแท็บ "อาร์กิวเมนต์" คุณจะเห็น "ตัวแปรสภาพแวดล้อม" ในแท็บเพิ่มCG_CONTEXT_SHOW_BACKTRACEและตั้งค่าเป็นใช่


1
ขอบคุณที่แสดง backtrace ทั้งหมดของ CG Context ... ปรากฎว่าปุ่มของฉันไม่มีอะไรต้องทำ .. มันคือ UIStatusBarItemView ..
lighthouse16

3
คุณลองตรวจสอบไฟล์ xib / storyboard ของคุณอีกครั้งได้ไหมและดูว่ามีการตั้งค่าภาพพื้นหลังสำหรับ UIButton, UIBarButtonItem ที่กำหนดเองหรือไม่หากตั้งค่าภาพไม่ถูกต้อง (ไม่มีไฟล์ภาพ ฯลฯ ) ก็สามารถสร้าง คำเตือนเช่นคุณมี
utogaria

ตรวจสอบซ้ำ.. ภาพทั้งหมดได้รับการตั้งค่าอย่างถูกต้อง.. ทั้งหมดอยู่ใน Assets.xcassets ฉันถึงกับถอดปุ่มออก .. ข้อผิดพลาดเดียวกันยังคงปรากฏอยู่ ..
lighthouse16

1
มีอีกสิ่งที่คุณสามารถลองได้ ใน Xcode ไปที่ "เบรกพอยต์เนวิเกเตอร์" และเพิ่ม "เบรกพอยต์ข้อยกเว้น" เรียกใช้แอปและดูว่ามีการเรียกใช้เบรกพอยต์ข้อยกเว้นหรือไม่ ถ้าเป็นเช่นนั้นคุณอาจเห็นได้ลึกขึ้นว่าเกิดอะไรขึ้น
utogaria

ถ้ามันใช้งานได้มันเป็นความคิดที่ดีมากสำหรับการแก้ไขข้อผิดพลาดที่เกี่ยวข้องกับส่วน UI
Arpit B Parekh

29

ปัญหานี้เกิดขึ้นกับ Xcode 7. ในกรณีของฉันฉันออกUIViewControllerBasedStatusBarAppearanceจากInfo.plistและแก้ปัญหา! ดูคำตอบในโพสต์นี้:


โซลูชันของคุณก็ใช้ได้ผลสำหรับฉันเช่นกันอย่างไรก็ตามถ้าฉันต้องการให้ UIStatusbar เป็นสีขาวล่ะ?
swiftBoy

ฉันจะไม่คิดว่ามันเป็นการ "แก้ไข" เพราะฉันคิดว่าคนส่วนใหญ่ที่ตั้งค่าUIViewControllerBasedStatusBarAppearanceเพียงเพราะต้องการ แต่กลับกลายเป็นว่าฉันคิดผิดเนื่องจากคำตอบนี้มีการ
โหวตถึง

ใช่ฉันเห็นด้วยกับคุณ. ฉันพบวิธีแก้ปัญหาในการเปลี่ยนสีของแถบสถานะในลิงค์นี้: stackoverflow.com/a/32675066/1095530
Weles

ไม่ได้ทำงานที่นี่และบางคนต้องการสิ่งนี้ใน plist เนื่องจากวิธีเดิมในการซ่อนแถบสถานะนั้นเลิกใช้แล้ว
thibaut noah

-6

บน Xcode 7:

ในกรณีที่คุณยังคงต้องการแถบสถานะที่ถูกซ่อนอยู่การเปลี่ยนแปลงเพียงUIViewControllerBasedStatusBarAppearanceในไฟล์ลงในInfo.plist View controller-based status bar appearanceอย่าลืมตั้งค่าโดยNO


2
สิ่งนี้ไม่สมเหตุสมผล UIViewControllerBaseStatusBarAppearanceและView controller-based status bar appearanceเป็นสิ่งเดียวกันกับInfo.plist. หนึ่งคือค่าคีย์และอีกอันที่ผู้ใช้หันหน้าเข้าหาข้อความ
esttorhe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.