2

我有一段绘制曲线的代码,并且已经在应用程序中使用了至少一年,没有任何问题。在过去的三天里,我突然每天收到大约 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 可用的前两天没有崩溃报告,但在那之后却源源不断。

4

1 回答 1

0

不要使用CGContextMoveToPointCGContextAddLineToPoint。使用strokePath 的用途CGPathMoveToPointCGPathAddLineToPoint方法。在你的情况下:

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);
于 2013-10-13T08:47:46.263 回答