防止计算器语法错误崩溃? Xcode中

时间:2012-03-16 00:41:00

标签: iphone ios xcode

目前我正在制作一个允许用户输入他们希望的公式的计算器。

实施例。 ((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

1 个答案:

答案 0 :(得分:3)

我没有使用其中任何一个但基于附加信息,它可能会抛出NSException。

如果是这种情况,您可以抓住并处理它。看起来它可能会格式化一条有用的消息,告诉你表达式有什么问题。

@try
{
    // do work
}
@catch(NSException* ex)
{
    // handle
}

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html

另外,看一下这些库是否提供了将ref传递给NSError的函数。如果是这样,你可以使用它。

还有DDMathParser,它应该是一个现代数学解析器,看起来它需要NSError。可能值得一看。

http://github.com/davedelong/DDMathParser