[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
質問
ある 前の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
にはもっと多くの情報、例えば具体的にどの関係が間違っているのか、などが含まれます)。
関連
-
[解決済み】isEqual:とハッシュをオーバーライドするためのベストプラクティス
-
[解決済み] 既存のオブジェクトに拡張機能を追加するSwiftファイルの命名のベストプラクティスは何ですか?
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] メソッドが存在するかどうかをチェックする
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン