Personnellement, je utiliser un reverse-DNS style de domaine. Par exemple:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
La troisième partie du domaine (@"myproject"
) est utilisée pour différencier les erreurs de ce projet ("My Project"
) des erreurs dans un autre projet ("My Other Project"
=> com.davedelong.myotherproject
).
C'est un moyen simple de s'assurer que je ne vais pas en conflit avec quelqu'un d'autre erreur domaines (si je suis en utilisant la 3ème partie du code), à moins que le développeur est à dessein d'essayer de jouer avec juste moi (qui je pense serait très peu probable...).
Comme pour le code de numérotation des conflits, ne vous inquiétez pas à ce sujet. Aussi longtemps que les codes sont uniques au sein d'un domaine, vous devriez être OK.
Comme pour la traduction des erreurs, c'est à vous. Quoi que vous fassiez, assurez-vous de le documenter. Personnellement, j'ai l'habitude de simplement passer sur cadre-généré des erreurs comme ils sont venus à moi, puisque je ne suis jamais tout à fait sûr que je vais gérer tous les codes et les traduire toutes les userInfo en quelque chose de plus spécifique à mon projet. Les cadres pouvaient modifier et ajouter d'autres codes, ou de changer la signification des codes existants, etc. Il m'aide aussi plus spécifiquement à identifier où l'erreur provient. Par exemple, si mon StackKit cadre génère une erreur dans l' com.stackkit
de domaine, je sais que c'est un cadre de problème. Toutefois, si elle génère une erreur dans l' NSURLErrorDomain
, alors je sais qu'il est venu spécialement à partir de l'URL mécanisme de chargement.
Ce que vous pourriez faire est de capturer le cadre d'erreur générés et l'envelopper dans une nouvelle erreur de l'objet qui a votre nom de domaine et un code générique, quelque chose comme kFrameworkErrorCodeUnknown
ou quelque chose, et puis lieu de la capture d'erreur dans l' userInfo
sous l' NSUnderlyingErrorKey
. CoreData n'est-ce beaucoup (par exemple, si vous essayez d' save:
un NSManagedObjectContext
, mais vous avez de la relation de l'intégrité des erreurs, vous obtiendrez une seule erreur, mais l' NSUnderlyingErrorKey
contiennent beaucoup plus d'informations, comme précisément les relations sont mauvaises, etc).