2013-08-24 2 views
2

Я использую NSExpression для оценки математической строки, и она отлично работает. Однако я хочу иметь способ поймать ошибку, когда входная строка недействительна, например «3 ++ 2». Есть ли способ сделать это вместо завершения приложения из-за «NSInvalidArgumentException». Извините, я довольно новичок в объективе-c. Код, который я использую сейчас:NSExpression catch недопустимые аргументы

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 не является подходящим инструментом для работы здесь. Класс является частью системы предикатов Какао и предназначен только для приема хорошо отформатированного ввода.

Предлагаю вам найти правильный математический парсер. Я считаю, что 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). –

 Смежные вопросы

  • Нет связанных вопросов^_^