捕获NSExpression中的NSInvalidArgumentException

在我的代码中,我将string评估为mathexpression式,例如:

NSString *formula=@"9*7"; NSExpression *expr =[NSExpression expressionWithFormat:formula]; NSLog(@"%@", [[expr expressionValueWithObject:nil context:nil]intValue]); 

上面的工作正常,但我会处理来自用户的dynamicinput,所以我需要能够捕捉到exception,当用户input错误的数据,因此我需要能够捕捉exception情况下,如下所示:

 NSString *formula=@"9*"; //note the deliberately invalid expression NSExpression *expr =[NSExpression expressionWithFormat:formula]; @try { [[expr expressionValueWithObject:nil context:nil]intValue]; } @catch (NSException *exception) { NSLog(@"Exception"); } @finally { NSLog(@"Finally"); } 

但是当我运行这个代码时,我得到:

终止应用程序由于未捕获exception“NSInvalidArgumentException”,原因:“无法parsing格式string”9 * == 1“'

有什么办法来捕捉这个exception? 或者,还有一种方法来testing一个expression式是否有效,然后再将其传递出去?

谢谢!

这个exception没有被你当前的代码捕获的原因是从这一行抛出exception:

 NSExpression *expr =[NSExpression expressionWithFormat:formula]; 

您需要将此行移入@try块。

你需要的是一个mathparsing器。 NSExpression被devise为采取格式良好的input,并不处理错误。 一个快速的谷歌会给这个 。