简单的CoreGraphics绘图偶尔会崩溃,但仅限于iOS 7

时间:2013-09-23 09:00:00

标签: ios core-graphics

我有一段代码可以绘制曲线,并且在应用程序中至少存在一年没有任何问题。在过去的三天里,我突然每天收到10个崩溃报告,全部来自iOS 7用户。报告说“for(int i = 1 etc”)崩溃了,但是我无法理解这个问题。崩溃日志指的是CoreGraphics所以它可能就在之前导致问题。这是代码:

CGContextBeginPath(cctx);
int step=220/lookupCount;
acx = 0;
acy = hf*100-bestResults[0]*hf*100/top;
CGContextMoveToPoint(cctx, acx, acy);
for(int i=1;i<lookupCount;i++){              //line 2005
    acx = hf*i*step;
    acy = hf*100-bestResults[i]*hf*100/top;
    CGContextAddLineToPoint(cctx, acx , acy);
}
CGContextStrokePath(cctx);

崩溃日志的一部分:

Thread 0 Crashed:
0   libsystem_kernel.dylib              0x395311fc ___pthread_kill + 8
1   libsystem_c.dylib                   0x394e202d _abort + 77
2   libsystem_c.dylib                   0x394c1c6b ___assert_rtn + 183
3   CoreGraphics                        0x2ed0da09 CG::Path::is_empty() const + 1
4   racquetTune                         0x000942d5 -[tension autoCorr] (tension.m:2005)

我一直试图通过将不同的变量设置为零或使它们变为无限来重新创建崩溃,但任何“成功”。是否有人知道iOS7中CoreGraphics的变化可能会导致这种变化?

崩溃来自不同类型的硬件并代表少数用户,但仍然太频繁而无法忽略。一个有趣的细节是,在iOS 7可用的前两天没有崩溃报告,但之后是稳定的流。

1 个答案:

答案 0 :(得分:0)

请勿使用CGContextMoveToPointCGContextAddLineToPoint。 使用CGPathMoveToPointCGPathAddLineToPoint方法可以使用strokePath。在你的情况下:

CGMutablePathRef path= CGPathCreateMutable();
int step=220/lookupCount;
acx = 0;
acy = hf*100-bestResults[0]*hf*100/top;
CGContextMoveToPoint(cctx, acx, acy);
for(int i=1;i<lookupCount;i++){              //line 2005
    acx = hf*i*step;
    acy = hf*100-bestResults[i]*hf*100/top;
    CGContextAddLineToPoint(cctx, acx , acy);
}

    CGContextAddPath(cctx, path);
    CGContextClosePath(cctx);
    CGContextFillPath(cctx);