0

三角形を表すモデル オブジェクトがあります。既知のパラメーターのさまざまな組み合わせを使用するいくつかの init メソッドがあります。次に、残りの値 (辺の長さと角度) を求めます。現在、指定されたパラメーターが nil であるか、この三角形タイプの適切な範囲外である場合、初期化子は nil を返します。ただし、ユーザーに適切なフィードバックを与えるために、コントローラ オブジェクトは、角度 > 90 度などの不適切な入力値もチェックする必要があります。これらのルールはモデルで一度だけ定義する必要があるため、これは私には悪臭を放ちます。だから私の考えは、コントローラーがユーザーに表示する必要がある文字列に設定される NSError オブジェクトを持つことです。これをコントローラーに伝える最善の方法がわかりません。エラーが発生した場合、init メソッドは Triangle インスタンスの代わりにこの NSError を返す必要がありますか? これは間違っているようです。それとも、NSError オブジェクトへのポインターをパラメーターとして init に渡し、エラーが発生した場合はそれを設定しますか? これを行うと、使用できないため、三角形オブジェクトの初期化から nil を返しますか、それとも三角形を部分的に初期化してそれを返しますか?

4

2 に答える 2

2

Appleのエラー処理プログラミングガイドで説明されているように、他のCocoaオブジェクトが使用するのと同じ規則に従う必要があります。

  • NSError**メソッドの最後のパラメーターとしてをとるパラメーターを追加します。
  • エラーが発生したときに、そのパラメーターがそうでない場合は、オブジェクトをNULL入力して、を返します。NSErrornil
  • initメソッドの場合は、[self release]戻る前にも行う必要がありnilます(ARCを使用している場合を除く)。
于 2012-06-04T00:56:53.990 に答える
1

詳細なエラーメッセージが必要な場合は、次のいずれかを実行します。

  1. 例外をスローします。これがまさに彼らの目的です。

  2. 入力を検証するだけの方法を提供します。

+ (NSError *)errorFromValidationOfSide:(float)a size:(float)b;

オブジェクトを作成する前にそれを呼び出します。そうすれば、検証コードを内部で共有し、オブジェクトの外部で複製することはできません。

init正しいタイプの作業オブジェクト以外のものをメソッドに返すようにすることは、ご想像のとおり、悪い考えです。initでNSErrorポインターを使用することは問題ありませんが、私には少し不格好に思えます。

于 2012-06-04T00:56:38.157 に答える