1

これはCの質問ですが、ここに行きます。

NSError オブジェクトへのポインターのアドレスをパラメーターとして受け取るメソッドがあります。さて、そのメソッドはクラス階層の何層か深いところに埋もれているので、エラー オブジェクトを一番上まで泡立たせる必要があります。

各メソッドでエラー オブジェクトを返すこともできますが、Cocoa の方法でそれを行い、エラー オブジェクトをパラメーターとして渡しながらブール値を返したいと思います。

これどうやってするの?

4

1 に答える 1

1

各メソッドでエラー オブジェクトを返すこともできますが、Cocoa の方法でそれを行い、エラー オブジェクトをパラメーターとして渡しながらブール値を返したいと思います。

Cocoa の方法は、次のように、エラー値の参照による (つまり、ポインターによる) 戻り値を伴うブール直接戻り値です。

NSError *error = nil;
if ([foo trySomething:bar error:&error]) {
    //Success!
} else {
    //Failure!
}

(または、trySomething:error:オブジェクトを返すこともできます。その場合、そのオブジェクトをブール値の戻り値として扱います: non-nilは true/成功、nilis false/failed)。

これを連鎖可能にするには、各メソッド (最も外側のメソッドを除く) にエラー ポインター パラメーターを設定し、それを実装で使用する必要があります。

- (void) trySomething:(MyBar *)bar error:(out NSError **)outError
    if ([bartender restock:bar error:outError]) {
        //Success!
    } else {
        //Failure!
    }
}

両方のアプローチを組み合わせて、独自のローカル変数でエラー オブジェクトをキャッチして、エラーの場合にそれをカスタマイズまたはラップしてから、呼び出し元が受け取るエラー リターン ポインターにカスタマイズされた/ラッパー エラーを格納することができます。

于 2010-12-18T22:12:50.743 に答える