捕获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,并不处理错误。 一个快速的谷歌会给这个 。
- 正则expression式在ios中提取href url并丢弃锚标签的其余部分?
- iPhone的iOS是否有一个代数计算器的应用程序的expression式分析器?
- 在Swift中使用正则expression式进行简单search时,如何避免由于searchstring中的特殊字符造成的错误?
- 如何在xcode 7中使用Swift 2.0中的NSRegularExpression
- iOS DDMathParser获取数字“块”
- 从电话号码获取区号
- expression式中的NSExpression自定义variables
- NSExpression有什么用途?
- Cocoa错误2048在cocoa中使用NSRegularExpression