我正在使用NSExpression来评估数学字符串,它运行良好。但是我希望有一种方法可以在输入字符串无效时捕获错误,例如“3 ++ 2”。有没有办法去做这个而不是由于'NSInvalidArgumentException'终止应用程序。对不起,我对objective-c相当新。我现在使用的代码是:
NSExpression *exp = [NSExpression expressionWithFormat: string];
NSNumber *result = [exp expressionValueWithObject:nil context:nil];
answer = [result stringValue];
答案 0 :(得分:4)
我认为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中的异常只应用于捕获意外的运行时错误。您的示例不符合条件。