私のコードでは、文字列を数式として評価しています。たとえば、次のようになります。
NSString *formula=@"9*7";
NSExpression *expr =[NSExpression expressionWithFormat:formula];
NSLog(@"%@", [[expr expressionValueWithObject:nil context:nil]intValue]);
上記は正常に機能しますが、ユーザーからの動的入力を処理するため、ユーザーが誤ったデータを入力したときに例外をキャッチできる必要があるため、次のような状況で例外をキャッチできる必要があります。
NSString *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");
}
ただし、このコードを実行すると、次のようになります。
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'フォーマット文字列 "9* == 1" を解析できません''
この例外をキャッチする方法はありますか? または、代わりに、式を渡す前に式が有効かどうかをテストする方法はありますか?
ありがとう!