web-dev-qa-db-fra.com

CGContextSaveGState: contexte non valide 0x0 Erreur uniquement sur le périphérique

Mise à jour: j'utilise XCode 7 Beta avec Swift 2.

Lorsque j'essaie d'exécuter mon application sur un iPhone, je reçois ces 3 erreurs:

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

Lorsque j'active la variable CG_CONTEXT_SHOW_BACKTRACE, j'obtiens ceci:

Backtrace:
      <<redacted>+40>
       <<redacted>+432>
        <<redacted>+144>
         <<redacted>+172>
          <<redacted>+332>
           <<redacted>+112>
            <<redacted>+820>
             <<redacted>+688>
              <<redacted>+356>
               <<redacted>+80>
                <<redacted>+808>
                 <<redacted>+344>
                  <<redacted>+420>
                   <<redacted>+104>
                    <<redacted>+284>
                     <<redacted>+556>
                      <<redacted>+504>
                       <<redacted>+1792>
                        <<redacted>+220>
                         <<redacted>+284>
                          <<redacted>+920>
                           <<redacted>+168>
                            <<redacted>+184>
                             <<redacted>+56>
                              <<redacted>+24>
                               <<redacted>+540>
                                <<redacted>+724>
                                 <CFRunLoopRunSpecific+384>
                                  <<redacted>+460>
                                   <UIApplicationMain+204>
                                    <main+164>

Je ne sais pas comment interpréter cela, je n'utilise aucun contenu CoreGraphics dans mon code, et les autres questions similaires avaient des réponses qui ne fonctionnaient pas pour moi. Je comprends qu'il peut être difficile d'aider au débogage sans code, mais je ne peux pas comprendre quel code est lié à cela, donc si quelqu'un a une idée, je peux poster plus de code.

26
mattgabor

D'après mon expérimentation, cela semble être dû à la définition de UIViewControllerBasedStatusBarAppearance dans Info.plist.

Cela se produit sur iOS 9 (bêta et GM) mais pas sur 8.4.

52
Mark Krenek

À la suggestion de @ JimRota, en faire une réponse, car cela a été jugé utile:

Avait-il encore cela dans XCode 7 GM, iOS9 GM. Mais, vérifiez-le: définissez UIViewControllerBasedStatusBarAppearance sur YES (même si la barre d'état est masquée, c'est pourquoi je l'ai définie sur NO pour commencer), et les avertissements disparaissent. Fou!

J'ai ensuite dû ajouter ceci à mes contrôleurs de vue pour garder la barre d'état cachée:

- (BOOL) prefersStatusBarHidden
{
    return YES;
}

Pour moi, tous mes VCs héritent en fait du ProjectNameViewController, donc ça simplifie un peu.

11
Olie

je reçois la même chose sur le xcode 7 GM, je pense que je les ignorerais simplement car tout fonctionne mais c'est assez ennuyeux même s'ils ont admis que c'était un bug et ne l'ont pas encore corrigé. - Publication du forum de développement

2
user3099837

à partir des commentaires ci-dessus, c'est la vraie façon de corriger:

UIViewControllerBasedStatusBarAppearance to YES in Info.plist
2
Logic

J'obtiens cela aussi (y compris la partie expurgée) lors de la compilation de mon projet sur iOS9 beta5. C'est très bien lors de la compilation sur iOS8.

Cela se produit directement dans mon délégué d'application, avant d'exécuter les commandes de

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

il semble donc plus probable qu'il s'agisse d'un problème bêta iOS que le nôtre.

1
Peter Johnson

J'ai eu le même type de bogue lors de l'utilisation de valeurs non entières comme encarts pour des images redimensionnables, comme ceci:

UIImage * image = [[UIImage imageNamed:@"pill"]
             resizableImageWithCapInsets:UIEdgeInsetsMake(17.5, 17.5, 17.5, 17.5)];

Cela a provoqué ce type de journaux. L'utilisation de valeurs entières a résolu le problème.

0
madewulf