Attraper NSInvalidArgumentException à partir de NSExpression

Dans mon code, j'évalue les strings comme des expressions mathématiques, par exemple:

NSSsortingng *formula=@"9*7"; NSExpression *expr =[NSExpression expressionWithFormat:formula]; NSLog(@"%@", [[expr expressionValueWithObject:nil context:nil]intValue]); 

Ce qui précède fonctionne bien, mais je vais gérer les inputs dynamics des users, donc je dois être en mesure d'attraper l'exception lorsque l'user entre des données défectueuses, donc je dois être en mesure d'attraper l'exception dans des situations comme:

 NSSsortingng *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"); } 

Cependant quand je cours ce code j'obtiens:

Mettre fin à l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: 'Impossible d'parsingr la string de format "9 * == 1"'

Y a-t-il un moyen d'attraper cette exception? Ou bien est-il possible de tester si une expression est valide avant de la transmettre?

Merci!

La raison pour laquelle cette exception n'est pas interceptée avec votre code actuel est que l'exception est levée à partir de cette ligne:

 NSExpression *expr =[NSExpression expressionWithFormat:formula]; 

Vous devez déplacer cette ligne dans le bloc @try .

Ce dont vous avez besoin est un parsingur de maths. NSExpression été conçu pour prendre des inputs bien formées et ne gère pas les erreurs. Un rapide Google donnera ceci .