Objective C - 检查NSString是否可计算

Noo*_*oyi 1 error-handling objective-c nsstring nsexception ios

我正在使用Objective C编写Xcode中的计算器进行学习(我是初学者.).这是我正在使用的代码(计算NSString).

- (IBAction)resultButtonPressed:(id)sender {

NSExpression *expression = [NSExpression expressionWithFormat:label_result.text];

label_result.text = [NSString stringWithFormat:@"%@", [expression expressionValueWithObject:nil context:nil]];

}
Run Code Online (Sandbox Code Playgroud)

问题是,只要用户键入"不可计算"的内容,如"6(5 + 1)"而不是"6*(5 + 1)",程序就会崩溃并且我得到这个:

2014-11-01 02:36:10.577 The Calculator[1515:575020] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "6(5+1) == 1"'
*** First throw call stack:
(0x18672de48 0x196e280e4 0x18753ad98 0x187538e2c 0x18764b128 0x18764b0c4 0x100062244 0x18af110f8 0x18aefa22c 0x18af10a94 0x18af10720 0x18af09c74 0x18aedd38c 0x18b17c1b4 0x18aedb8f4 0x1866e60e8 0x1866e538c 0x1866e343c 0x1866111f4 0x18f7a75a4 0x18af42784 0x10006286c 0x197496a08)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
Run Code Online (Sandbox Code Playgroud)

所以在过去的半小时里我一直在搜索一个方法/函数,它允许你首先检查 NSString是否可以计算,这样我就可以(如果需要)创建一个警告标签或类似的东西,但我没有找一个.有没有人可以帮助我?

谢谢!

bbu*_*bum 5

NSExpression不是设计为错误检测,用户可纠正,表达式解析器.开发人员可以使用它来评估确保正确形成的表达式.也没有内置的API来做到这一点.

您必须在其他地方寻找具有用户友好错误处理的表达式解析器.鉴于表达式解析是一个典型的Comp Sci 101问题,谷歌搜索类似"C数学表达式解析器"或"iOS数学表达式解析器"或任何其他几十个关键字汤组合将产生代码和讨论.

注意:不要打扰异常捕获路径.iOS/OS X中的例外仅用于表示程序员错误,并非旨在可恢复.

  • @bbum我在谈论iOS.有整个框架,比如AVFoundation/AVKit,如果你有一个异常断点,你就不会得到_anywhere_; 你很幸运能够上手.你是建议我不应该笑和咒骂我应该报告这些错误? (2认同)