目前我正在制作一个允许用户输入他们希望的公式的计算器。
实施例。 ((1 + 1)** 9)2)
这很好用,我用了两种方法来计算它。
首先:
answer = [[NSExpression expressionWithFormat:typeTo.text, nil] expressionValueWithObject:nil context:nil];
typeTo.text = [NSString stringWithFormat:@"%@", answer];
answerLabel.text = [NSString stringWithFormat:@"ANS { %@ }", answer];
第二
answer = [GCMathParser evaluate:typeTo.text];
这两个都毫无困难地计算出问题。但如果用户键入:
(1 + 1))[两个括号]
两种方式都崩溃了。这是许多不同语法错误的一个示例。有没有办法轻易防止这种情况?
其他信息: 这是第二种方法捕获错误的方式:
#ifdef __COCOA_IMPLEMENTATION__
[NSException raise:@"Error in expression" format:@"error = %s", errStr];
#endif
谢谢:D
答案 0 :(得分:3)
我没有使用其中任何一个但基于附加信息,它可能会抛出NSException。
如果是这种情况,您可以抓住并处理它。看起来它可能会格式化一条有用的消息,告诉你表达式有什么问题。
@try
{
// do work
}
@catch(NSException* ex)
{
// handle
}
另外,看一下这些库是否提供了将ref传递给NSError的函数。如果是这样,你可以使用它。
还有DDMathParser,它应该是一个现代数学解析器,看起来它需要NSError。可能值得一看。