2013-03-24 10 views
5

このような初心者質問のお詫び。ObjC:エラー処理...返すもの

私は3つの文字列を取り、部分文字列を返すクラスメソッドを記述しました。

特定の条件が満たされている場合にのみ部分文字列を返すことを許可する条件文を記述しました。しかし、部分文字列を抽出できない場合、返す必要があるものはわかりません。現時点では、メソッドはデフォルトの 'エラー'文字列を返すが、これはベストプラクティスではないかもしれないという気持ちがある。ここで

は私の方法である:

+(NSString *)ExtractSubstringFrom:(NSString *)sourceString 
      Between:(NSString *)firstString And:(NSString *)secondString { 


      NSRange stringRangeOne = [sourceString rangeOfString:secondString]; 
      NSString *resultString; 

      if (stringRangeOne.location != NSNotFound) { 
      resultString = [sourceString substringToIndex:stringRangeOne.location]; 
      } 

      NSRange stringRangeTwo = [sourceString rangeOfString:firstString]; 

      if (stringRangeTwo.location !=NSNotFound) { 
      resultString = [resultString substringFromIndex:stringRangeTwo.location+stringRangeTwo.length]; 
      return resultString; 
      } 

      else return @"Error!"; 

      //To do... improve error checking 

      } 

私はこの方法でより多くのエラーがフレンドリーにできますか?

答えて

6

は、いくつかのObjective Cで、この種のエラーを処理する方法があります。デフォルト値を返す

  • - 通常は、デフォルト値はnilです。 Objective Cではnilオブジェクトの操作を実行できるので、これは比較的安全です。
  • NSErrorオブジェクトを生成します。これは、接続や構成の問題など、エンドユーザーが対処できるエラーのほうが一般的です。このようなAPIの不幸な副作用は、余分なパラメータを設定して渡す必要があることです。
  • アサーションを使用する - これは「プログラミングエラー」を処理する、つまりプログラムの引数が指定された範囲外にある場合の良い方法です。
  • 例外をスローする - このオプションは言語で利用できますが、Appleはこれを使用することを強く推奨しません。私はこのオプションを自分で使用することはないが、完全性のためにここで言及した。
+1

1を参照してください。 –

+0

Appleのマニュアルは、それぞれをいつ使用するかについてはっきりとしています。 「Objective-Cによるプログラミング:エラー処理」には、「プログラミングエラーの例外」というタイトルのセクションがあります。それが彼らのためのものです。 – quellish

0

実際のベストプラクティスは、ここでは、クラスメソッドの内部でこれをしないことであろうが、代わりに値を受け入れ、それが設定される前に検証メソッドを呼び出すことになる事にKey Value Validationを実装します。したがって、この検証/突然変異ロジックをこのメソッドから削除して、検証メソッド内に置き、コントローラ内で、値を設定する前に検証メソッドと呼ばれる値を変更しています。これにより、検証ロジックは値を変更(つまりデフォルト)するか、入力値を使用可能なものに強制変換できない場合にエラーを戻すことができます。

Objective-Cでのエラー処理に関する一般的な情報については、例外に対する警告のためProgramming With Objective-C: Dealing with ErrorsError Handling Programming Guide