3

NSExpression を使用して数学的な文字列を評価していますが、うまく機能します。ただし、「3++2」など、入力文字列が無効な場合にエラーをキャッチする方法が必要です。「NSInvalidArgumentException」が原因でアプリケーションが終了する代わりに、これを行う方法はありますか。申し訳ありませんが、私はobjective-cにかなり慣れていません。私が現在使用しているコードは次のとおりです。

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

1 に答える 1

5

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 の例外は、予期しない実行時エラーをキャッチするためにのみ使用する必要があります。あなたの例は資格がありません。

于 2013-08-24T18:24:41.930 に答える