0

我正在构建一个应用程序,该应用程序使用 Dave DeLong 的 DDMathParser 绘制文本给定函数。我需要知道(对于我评估的每个“x”)解决方案是否存在,或者它只给我 0.00,因为它无法评估它。也许是布尔?

while (x <= (viewWidth - originOffsetX)/axisLenghtX) {

        NSDictionary *variableSubstitutions = [NSDictionary dictionaryWithObject: [NSNumber numberWithDouble:x] forKey:@"x"];
        NSString *solution = [NSString stringWithFormat:@"%@",[[DDMathEvaluator sharedMathEvaluator] 
                                                               evaluateString:plotterExpression withSubstitutions:variableSubstitutions]];
        numericSolution = solution.numberByEvaluatingString.doubleValue;
        NSLog(@"%f", numericSolution);
        if (newline) {
            CGContextMoveToPoint(curveContext, (x*axisLenghtX + originOffsetX), (-numericSolution * axisLenghtY + originOffsetY));
            newline = FALSE;
        } else {
            CGContextAddLineToPoint(curveContext, (x*axisLenghtX + originOffsetX), (-numericSolution * axisLenghtY + originOffsetY));
        }
        x += dx;
4

1 回答 1

2

好吧,由于您使用的是最简单的 API,因此如果出现错误,则无法通知您。这在 wiki 上的使用页面的第一部分有清楚的解释:

有几种方法可以评估字符串,具体取决于您要进行多少自定义。这些选项中的大多数都需要一个 NSError ** 参数,尽管有些不需要。

  • 如果您使用不接受 NSError ** 的选项之一,则任何标记化、解析或评估错误都将被 NSLogged。
  • 如果您使用接受 NSError ** 的选项之一,那么您必须提供一个。不这样做可能会导致崩溃。

所以你想要做的是:

NSDictionary *variableSubstitutions = [NSDictionary dictionaryWithObject: [NSNumber numberWithDouble:x] forKey:@"x"];
NSError *error = nil;
NSNumber *number = [[DDMathEvaluator sharedMathEvaluator] evaluateString:plotterExpression withSubstitutions:variableSubstitutions error:&error]];

if (number == nil) {
  NSLog(@"an error occurred while parsing: %@", error);
} else {
  numericSolution = [number doubleValue];
  // continue on normally
}
于 2012-05-02T17:38:54.920 回答