2012-05-02 65 views
0

我正在構建一個應用程序,該應用程序使用Dave DeLong使用DDMathParser對給定函數的文本進行圖形化。如果解決方案存在,我需要知道(對於每個「x」我評估),或者它只是給我0.00,因爲它無法評估它。也許是布爾?DDMathParser - 如何識別錯誤是iOS

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; 

回答

2

好吧,既然你用最簡單的API可能,有沒有辦法通過通知,如果有一個錯誤。這是在Usage頁的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 
} 
+0

謝謝,這正是我一直在尋找! –