"Context no válido 0x0" al usar UIBezierPath y CAShapeLayer

Estoy teniendo una situación muy similar a la que se describe en este hilo SO . Leí todas las respuestas en ese hilo y no pude encontrar ninguna que resolviera mi problema. He networkingucido mi problema a 4 líneas dentro de la function a continuación. Cada una de las 4 líneas genera varias líneas de errores, todos los cuales he enumerado a continuación (he eliminado los duplicates).

He intentado mover [path closePath]; Debajo de esas 4 líneas, pero no cambia nada. También establecí un punto de interrupción antes de la primera línea y pasé manualmente la function línea por línea, y son solo esas 4 líneas las que causan esgulps.

Como parece ser una tendencia con este problema, todo funciona exactamente como debería, pero inunda la console con este tipo de posts.

Cualquier ayuda sería muy apreciada, y me complacería proporcionarle más información y actualizaciones.


Función:

 -(CAShapeLayer *)lineBetweenPoint:(CGPoint)start andPoint:(CGPoint)end { //Draw the first circle UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:start radius:kLineEndRadius startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:TRUE]; //Add the line [path moveToPoint:start]; [path addLineToPoint:end]; [path moveToPoint:end]; //Draw the second circle [path addArcWithCenter:end radius:kLineEndRadius startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:TRUE]; //Close the path and set the coloring [path closePath]; /*The following 4 lines cause problems*/ [[UIColor blueColor] setStroke]; /*CAUSES PROBLEM*/ [[UIColor blueColor] setFill]; /*CAUSES PROBLEM*/ [path stroke]; /*CAUSES PROBLEM*/ [path fill]; /*CAUSES PROBLEM*/ //Create a shape layer CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = [path CGPath]; shapeLayer.strokeColor = [kLineColor CGColor]; shapeLayer.lineWidth = kLineWidth; shapeLayer.fillColor = [kLineColor CGColor]; //Return the layer return shapeLayer; } 

Salida de logging:

: CGContextSetStrokeColorWithColor: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSetFillColorWithColor: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSaveGState: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSetLineWidth: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSetLineJoin: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSetLineCap: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSetMiterLimit: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextSetFlatness: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextAddPath: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextDrawPath: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

: CGContextRestoreGState: context no válido 0x0. Este es un error grave. Esta aplicación, o una biblioteca que usa, está utilizando un context no válido y, por lo tanto, contribuye a una degradación global de la estabilidad y confiabilidad del sistema. Este aviso es una cortesía: arregle este problema. Se convertirá en un error fatal en una próxima actualización.

Estás mezclando tu API. Cuando usa un CAShapeLayer, en realidad no hace el dibujo usted mismo, simplemente configura el object y deja que el server renderizado CoreAnimation haga el dibujo. Con CoreGraphics, realiza su dibujo en process en un CGContextRef. Su problema aquí es que CGContextRef necesita ser creado (lo que ocurre automáticamente en – [UIView drawRect:]). Haría esto usando uno de los UIGraphicsBeginImageContext … normalmente, pero aquí no quiere CG, desea CA. Así que simplemente omite esas cuatro líneas y asegúrese de que su CAShapeLayer esté configurada correctamente y que estará bien.