2010-12-01 4 views
1

問題のメソッド(実際には多態的に実装された再帰的検索メソッドファミリ)は、特定のタイプのオブジェクトへのポインタを返します。私は失敗の場合には何も返さなかった。今私は2つの異なる種類の失敗をしたいと思います。それを実装する最も簡単な方法は何ですか?メソッドから2つの異なる "nil-like"可能な戻り値を持つ便利な方法はありますか?

答えて

7

これを行う最良の方法は、return nil;を保持することですが、関数の引数の1つとしてエラーポインタを使用します。このようにして、エラーを送信し、その後に値をチェックして何が起きたかを確認することができます。あなたの関数は引き続き実行されますが、返されるものを何らかの方法で制御することができます。一例として、

、ここで私はmanagedObjectContextを保存するために使用するいくつかのコードがあります:

NSManagedObjectContext *moc = [self managedObjectContext]; 

NSError *error; 
if (![moc save:&error]) { 
    NSString *description = [error localizeDescription]; 
      NSInteger code = [error code]; 
} 

私はエラーのうち、情報をプルするいくつかの方法を示すために、ブロックの内部を微調整しました。あなたにとっては、異なるゼロ値を区別するために単純なエラーコードを使用するのが最善でしょう。 (エラーメッセージを解釈するためのコードを複製する必要がありますように、しかしおそらくない最良の方法)

は、ここでは、コードの例です:

-(id) functionCall:(NSError *)error { 
    ... 
    if (nilCondition) { 

     if (firstNilCondition) { 
      [error setCode:1]; 
     } 
     if (firstNilCondition) { 
      [error setCode:2]; 
     } 

     return nil; 
    } 
} 
+0

+1これは確かに最良の方法です。 Appleの接続関連の方法のほとんどは、たとえば "stringWithContentsOfURL:encoding:error"のようにこれを使用します。 –

+0

すべての私の呼び出しに余分な議論を含める必要があることを迷惑に思う。しかし、明らかにこれの周りに良い方法はありません。 –

+0

ええ、wordinessは間違いなくObjective-Cの作成者と位相を合わせません。これは質問に答えましたか? –

関連する問題