個人的には、逆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:
たNSManagedObjectContext
が関係の整合性エラーがある場合、単一のエラーが返さNSUnderlyingErrorKey
れますが、具体的にはどの関係が間違っているかなど、より多くの情報が含まれます)。