2013-08-24 61 views
2

我正在使用NSExpression來評估一個數學字符串,它工作的很好。但是,我想有一個方法來捕獲輸入字符串無效時發生的錯誤,如「3 ++ 2」。有沒有辦法去做這個,而不是應用程序因'NSInvalidArgumentException'而終止。對不起,我對Objective-C很新。我現在使用的代碼是:NSExpression捕獲無效參數

NSExpression *exp = [NSExpression expressionWithFormat: string]; 
NSNumber *result = [exp expressionValueWithObject:nil context:nil]; 
answer = [result stringValue]; 
+0

請參閱http://stackoverflow.com/questions/17287076/catching-nsinvalidargumentexception-from-nsexpression獲取答案。 – diederikh

+0

「3 ++ 2」實際上是有效的;這意味着「3 + +2」,而不是「3 + -2」 –

回答

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中的異常只能用於捕獲意外的運行時錯誤。你的例子沒有資格。

+0

任何使用try catch塊來解決它的方法? – Amendale

+0

@ user2303367 DDMathParser不會拋出異常,但它也會說'3 ++ 2'是一個有效的表達式(計算結果爲5)。 –