DDMathParser - 如何识别错误是iOS

时间:2012-05-02 17:33:16

标签: ios cocoa-touch parsing

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

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;

1 个答案:

答案 0 :(得分:2)

好吧,既然你正在使用最简单的API,那么就没有办法通知你是否有错误。维基上的Usage页面的第一部分清楚地解释了这一点:

  

有几种方法可以评估字符串,具体取决于多少   你想做的定制。大多数这些选项都需要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
}