3

我正在使用 NSExpression 来评估数学字符串,并且效果很好。但是,当输入字符串无效时,我想有一种方法来捕获错误,例如“3++2”。有没有办法做到这一点,而不是由于“NSInvalidArgumentException”而终止应用程序。对不起,我对objective-c还很陌生。我现在使用的代码是:

NSExpression *exp = [NSExpression expressionWithFormat: string];
NSNumber *result = [exp expressionValueWithObject:nil context:nil];
answer = [result stringValue];
4

1 回答 1

5

我认为 NSExpression 不是这里工作的正确工具。该类是 Cocoa 谓词系统的一部分,旨在仅接受格式良好的输入。

我建议您寻找合适的数学解析器。我相信GCMathParser是一个不错的选择。还有DDMathParser

如果你坚持使用 NSExpression,你可以像这样捕获异常:

@try {
  // the code that potentially raises an NSInvalidArgumentException
} @catch (NSException *exception) {
  if ([[exception name] isEqualToString:NSInvalidArgumentException]) {
    // your error handling
  }
}

但是,请注意,这是不好的做法。Objective-C 中的异常应该只用于捕获意外的运行时错误。你的例子不符合条件。

于 2013-08-24T18:24:41.930 回答