2012-03-16 8 views
1

現在、私はユーザーが望む数式を入力できるようにする電卓を作っています。電卓の構文エラークラッシュを防止しますか? Xcode

Ex。 ((1 + 1)** 9)+2)

これはうまく動作しますが、これを計算するには2つの方法があります。

まず:

answer = [[NSExpression expressionWithFormat:typeTo.text, nil] expressionValueWithObject:nil context:nil]; 
    typeTo.text = [NSString stringWithFormat:@"%@", answer]; 
    answerLabel.text = [NSString stringWithFormat:@"ANS { %@ }", answer]; 

第二:

 answer = [GCMathParser evaluate:typeTo.text]; 

これらの両方は問題なく、問題を計算します。しかし、もし、ユーザタイプ:

(1 + 1))2つのブラケット]

両方方法クラッシュ。これは、さまざまな構文エラーの一例です。簡単にこれを防ぐ方法はありますか?

追加情報: これは、第2の方法は、エラーをキャッチ方法です:

#ifdef __COCOA_IMPLEMENTATION__ 
[NSException raise:@"Error in expression" format:@"error = %s", errStr]; 
#endif 

THANKS:D

答えて

3

私はそれは、ありそれらのいずれかを使用しますが、追加の情報をもとにしていませんNSExceptionをスローします。

このような場合は、キャッチして処理できます。式に何が間違っているかを伝える便利なメッセージを書いているようです。

@try 
{ 
    // do work 
} 
@catch(NSException* ex) 
{ 
    // handle 
} 

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html

また、これらのライブラリはNSErrorへの参照を渡す機能を提供するかどうかを確認します。もしそうなら、それを使うことができます。

現代の数学的パーサーであるはずのDDMathParserもあり、NSErrorが必要です。一見の価値があるかもしれません。

http://github.com/davedelong/DDMathParser

+0

あなたの先生。天才です。私は十分にあなたに感謝できません! –

+0

DDMathParserもあります.DDMathParserは現代的で、NSErrorが必要です。ここで見てください:https://github.com/davedelong/DDMathParser – bryanmac

+0

右、これは私の問題をかなりうまく解決しました。私は後でそれを使用して終わるかもしれませんが、今のところ私はそれをalight –