Domanda

I am trying to make a simple circle in viewdidload with the following code:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100,100) radius:100 startAngle:M_PI/6 endAngle:M_PI clockwise:YES];


    [aPath fill];
}

I am getting the following error:

CGContextSaveGState: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

I know this problem is already being discussed here but I can not relate. The error occurs at

[aPath fill];

Is this something related to the application lifecycle?

È stato utile?

Soluzione

The error means that you have no context to draw the path into, and you must have one.

As this code is in a view controller, you need to decide which context you should be drawing into.

You can create a context yourself and draw your path into it, which would be beneficial, for example, if you wanted to create an image containing the path. That would be done using CGBitmapContextCreate.

Or, and probably more what you're looking for, by drawing the path into the view controllers view context. This is available in the drawRect: method. So, you would implement that in your custom view subclass and move your code there.

An alternative is to use a CAShapeLayer, created with the path (using the CGPath) and add that as a sublayer of the view controllers views layer. Then you don't need to worry about the context at all...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top