2016-07-27 30 views
0
for (NSValue * point in points){ 
    CGPoint p = point.CGPointValue; 
    CAShapeLayer *point = [CAShapeLayer layer]; 
    [point setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(p.x, p.y, 100, 100)] CGPath]]; 
    [point setStrokeColor:nil]; 
    [point setFillColor: [[UIColor blueColor] CGColor]]; 
    [point setZPosition:2]; 
    [self.layer addSublayer:point]; 
} 

Also ich diesen Code haben, ist die Punkte ein NSMutableArray, die NSValue von CGPoints enthält, jedoch bin ich immer diesen Fehler zu stoßen.Wie man einen Satz von Kreis CAShapeLayer Machen Von einer Schleife

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7faf214a1a50> was mutated while being enumerated.' 

Was mache ich falsch? Kann ich das irgendwie beheben?

Antwort

0

Der Fehler tritt auf, wenn Sie mit einer veränderbaren Array-Synchronisierung in zwei verschiedenen Threads arbeiten.
Dies ist ein Synchronisierungsproblem.
Kopieren Sie die Punkte-Array möglicherweise Ihr Problem.
ändern Sie Ihren Code wie folgt:

for (NSValue * point in points.copy){ 
    CGPoint p = point.CGPointValue; 
    CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
    [shapeLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(p.x, p.y, 100, 100)] CGPath]]; 
    [shapeLayer setStrokeColor:nil]; 
    [shapeLayer setFillColor: [[UIColor blueColor] CGColor]]; 
    [shapeLayer setZPosition:2]; 
    [self.layer addSublayer:shapeLayer]; 
} 
+0

Leider hat es das Problem nicht lösen :(, aber als ich versuchte, die [self.layer addSublayer: Punkt] kommentiert, es funktioniert, aber ich bin nicht in der Lage Zeig die CAShapeLayers .. :( – jane