NSExpression捕获无效的参数

Ame*_*ale 3 objective-c invalid-argument nsexpression

我正在使用NSExpression评估数学字符串,并且效果很好。但是,我想提供一种在输入字符串无效(例如“ 3 ++ 2”)时捕获错误的方法。有没有办法解决此问题,而不是由于“ NSInvalidArgumentException”而导致应用程序终止。抱歉,我对Objective-C并不陌生。我现在使用的代码是:

NSExpression *exp = [NSExpression expressionWithFormat: string];
NSNumber *result = [exp expressionValueWithObject:nil context:nil];
answer = [result stringValue];
Run Code Online (Sandbox Code Playgroud)

mis*_*ake 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
  }
}
Run Code Online (Sandbox Code Playgroud)

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