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 を使用しているため、エラーが発生した場合に通知を受ける方法はありません。これは、ウィキの使用法ページの最初のセクションで明確に説明されています。

カスタマイズの程度に応じて、文字列を評価する方法がいくつかあります。これらのオプションのほとんどは 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 に答える