2016-09-05 1 views
-2

Que faire? Je reçois cette erreur lorsque je définis la variable Backtracing."Invalid context 0x0" lors du remplissage d'un UIBezlerPath

Ce code est à l'origine de l'erreur sûre:

UIBezierPath* ovalPath = [UIBezierPath bezierPath]; 
[ovalPath addArcWithCenter: CGPointMake(CGRectGetMidX(ovalRect), CGRectGetMidY(ovalRect)) radius: CGRectGetWidth(ovalRect)/2 startAngle: 180 * M_PI/180 endAngle: 0 * M_PI/180 clockwise: YES]; 
[ovalPath addLineToPoint: CGPointMake(CGRectGetMidX(ovalRect), CGRectGetMidY(ovalRect))]; 
[ovalPath closePath]; 

[UIColor.grayColor setFill]; 
[ovalPath fill]; 

Erreur:

CGContextSetFlatness: invalid context 0x0. Backtrace: 
    <<redacted>+48> 
    <-[ViewController viewDidLoad]+2868> 
    <<redacted>+996> 
    <<redacted>+28> 
     <<redacted>+76> 
     <<redacted>+252> 
     <<redacted>+48> 
     <<redacted>+3456> 
      <<redacted>+1684> 
      <<redacted>+168> 
      <<redacted>+36> 
      <<redacted>+168> 
       <<redacted>+56> 
       <<redacted>+24> 
       <<redacted>+540> 
       <<redacted>+724> 
        <CFRunLoopRunSpecific+384> 
        <<redacted>+460> 
        <UIApplicationMain+204> 
        <main+124> 
Sep 5 21:55:56 Motion Tracking Radar - Aliem[2934] <Error>: 

Répondre

3

[ovalPath fill] ne peut être appelé s'il existe actuellement un CGContext (c.-à appeler UIGraphicsGetCurrentContext() global retournerait autre chose que nil). La façon la plus courante d'obtenir ceci est de courir dans drawRect:, mais vous pouvez créer des objets temporaires CGContext si vous voulez, en utilisant généralement CGBitmapContextCreate, et en faire le contexte actuel avec UIGraphicsPushContext.

Dans la plupart des cas, lorsque les utilisateurs rencontrent ce problème, c'est parce qu'ils pensent pouvoir dessiner sur l'écran à des points aléatoires du programme. Ce n'est pas vrai. Vous pouvez uniquement dessiner pendant le cycle de dessin, ce qui est le plus souvent réalisé en plaçant votre code dans la vue drawRect:. (Il existe d'autres options utilisant des couches ou similaires, mais c'est l'approche la plus courante.)

Voir le Drawing and Printing Guide for iOS (ou l'équivalent sur Mac), pour une introduction au dessin Cocoa.

+0

Merci beaucoup! :) – chronikum