我正在构建一个应用程序,使用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;
答案 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
}