これはCの質問ですが、ここに行きます。
NSError オブジェクトへのポインターのアドレスをパラメーターとして受け取るメソッドがあります。さて、そのメソッドはクラス階層の何層か深いところに埋もれているので、エラー オブジェクトを一番上まで泡立たせる必要があります。
各メソッドでエラー オブジェクトを返すこともできますが、Cocoa の方法でそれを行い、エラー オブジェクトをパラメーターとして渡しながらブール値を返したいと思います。
これどうやってするの?
これはCの質問ですが、ここに行きます。
NSError オブジェクトへのポインターのアドレスをパラメーターとして受け取るメソッドがあります。さて、そのメソッドはクラス階層の何層か深いところに埋もれているので、エラー オブジェクトを一番上まで泡立たせる必要があります。
各メソッドでエラー オブジェクトを返すこともできますが、Cocoa の方法でそれを行い、エラー オブジェクトをパラメーターとして渡しながらブール値を返したいと思います。
これどうやってするの?
各メソッドでエラー オブジェクトを返すこともできますが、Cocoa の方法でそれを行い、エラー オブジェクトをパラメーターとして渡しながらブール値を返したいと思います。
Cocoa の方法は、次のように、エラー値の参照による (つまり、ポインターによる) 戻り値を伴うブール直接戻り値です。
NSError *error = nil;
if ([foo trySomething:bar error:&error]) {
//Success!
} else {
//Failure!
}
(または、trySomething:error:
オブジェクトを返すこともできます。その場合、そのオブジェクトをブール値の戻り値として扱います: non-nil
は true/成功、nil
is false/failed)。
これを連鎖可能にするには、各メソッド (最も外側のメソッドを除く) にエラー ポインター パラメーターを設定し、それを実装で使用する必要があります。
- (void) trySomething:(MyBar *)bar error:(out NSError **)outError
if ([bartender restock:bar error:outError]) {
//Success!
} else {
//Failure!
}
}
両方のアプローチを組み合わせて、独自のローカル変数でエラー オブジェクトをキャッチして、エラーの場合にそれをカスタマイズまたはラップしてから、呼び出し元が受け取るエラー リターン ポインターにカスタマイズされた/ラッパー エラーを格納することができます。