NSExpression 捕获无效参数
Posted
技术标签:
【中文标题】NSExpression 捕获无效参数【英文标题】:NSExpression catch invalid arguments 【发布时间】:2013-08-24 17:35:35 【问题描述】:我正在使用 NSExpression 来评估一个数学字符串,它工作得很好。但是,当输入字符串无效时,我想有一种方法来捕获错误,例如“3++2”。有没有办法做到这一点,而不是应用程序因“NSInvalidArgumentException”而终止。对不起,我对objective-c还很陌生。我现在使用的代码是:
NSExpression *exp = [NSExpression expressionWithFormat: string];
NSNumber *result = [exp expressionValueWithObject:nil context:nil];
answer = [result stringValue];
【问题讨论】:
请参阅***.com/questions/17287076/… 以获得答案。 "3++2" 实际上是有效的;它的意思是“3 + +2”,而不是“3 + -2” 【参考方案1】:我认为 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 中的异常应该只用于捕获意外的运行时错误。你的例子不符合条件。
【讨论】:
有什么方法可以使用 try catch 块绕过它? @user2303367 DDMathParser 不会抛出异常,但它也会说3++2
是一个有效的表达式(计算结果为 5)。以上是关于NSExpression 捕获无效参数的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSExpression 时捕获 NSInvalidArgumentException 的正确方法 [重复]
NSExpression 使用 sqrt: 函数导致 NSInvalidArgumentException
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:indexPath!= nil”