1. ホーム
  2. objective-c

[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード

2022-05-17 02:55:16

質問

ある 前のSOの投稿 では、独自のフレームワークのためのエラードメインの設定に関して、エラードメインとカスタムエラーコードの設定に関するベストプラクティスは何でしょうか? を設定するベストプラクティスは何ですか? ?

例えば、多くの検証を行うCore Dataを多用するアプリを開発する場合、Core Dataのエラーコード(例えば NSManagedObjectValidationError から CoreDataErrors.h を使うか、それとも自分で MyAppErrors.h を作成し、より具体的にエラーを定義する(例. MyAppValidationErrorInvalidCombinationOfLimbs ?

カスタムのエラードメインとエラーコードのセットを作成することで、コードを大幅に曖昧にすることができますが、維持するためのオーバーヘッドが大きすぎませんか、エラーコード番号の競合を心配する必要がありますか。 あるいは、ここに他の懸念事項があるのでしょうか?

どのように解決するのですか?

私自身は、逆DNS形式のドメインを使っています。 例えば

NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];

ドメインの3番目の部分( @"myproject" ) は、このプロジェクトからのエラーを区別するために使われているだけです ( "My Project" ) と他のプロジェクトのエラー ( "My Other Project" => com.davedelong.myotherproject ).

これは、(サードパーティのコードを使用している場合)他の誰かのエラードメインと衝突しないことを保証する簡単な方法です。 ただ を意図的に混乱させようとしているのでなければ (それは非常にありそうにないと思いますが...)。

コード番号の衝突については、心配する必要はありません。 コードが一意である限り ドメイン内で である限り、問題ありません。

エラーの翻訳に関しては、それはあなた次第です。 何をするにしても、きちんと文書化するようにしましょう。 個人的に なぜなら、私はすべてのコードを処理し、すべてのuserInfoを私のプロジェクトにより特化したものに翻訳することを完全に確信することができないからです。 フレームワークが変わってコードが追加されたり、既存のコードの意味が変わったりする可能性もありますから。 また、エラーが発生した場所をより具体的に特定するのにも役立ちます。 たとえば、私の StackKit フレームワークでエラーが発生した場合 com.stackkit ドメインでエラーが発生した場合、フレームワークの問題であることがわかります。 しかし、もし NSURLErrorDomain でエラーが発生した場合、私はそれが特にURLロードメカニズムに由来することを知っています。

あなたは はフレームワークが生成したエラーをキャプチャし、あなたのドメインと一般的なコードを持つ新しいエラーオブジェクトにラップします。 kFrameworkErrorCodeUnknown のような、あなたのドメインと一般的なコードを持つ新しいエラーオブジェクトにラップし、それからキャプチャされたエラーを userInfo の下に NSUnderlyingErrorKey . CoreDataはこれをよくやります(例えば、もしあなたが save: an NSManagedObjectContext を使用した場合、リレーションシップの整合性エラーが発生すると、1つのエラーが返ってきますが NSUnderlyingErrorKey にはもっと多くの情報、例えば具体的にどの関係が間違っているのか、などが含まれます)。