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];
}
所以我有这个代码,这个点是一个NSMutableArray,它包含了CGPoints的NSValue,但是我总是遇到这个错误。
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7faf214a1a50> was mutated while being enumerated.'
我做错了什么?无论如何我可以解决这个问题吗?
答案 0 :(得分:0)
当您在两个不同的线程中处理可变数组同步时,会发生错误 这是一个同步问题 复制点数组可能会解决您的问题 只需修改您的代码如下:
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];
}