Eu pessoalmente uso um domínio de estilo DNS reverso. Por exemplo:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
A terceira parte do domínio ( @"myproject"
) é usada apenas para diferenciar os erros deste projeto ( "My Project"
) dos erros de outro projeto ( "My Other Project"
=> com.davedelong.myotherproject
).
É uma maneira simples de garantir que não vou entrar em conflito com os domínios de erro de outra pessoa (se estiver usando código de terceiros), a menos que o desenvolvedor esteja propositalmente tentando mexer apenas com me (que eu acredito que seria altamente improvável. ..).
Quanto aos conflitos de numeração de código, não se preocupe com isso. Contanto que os códigos sejam exclusivos dentro de um domínio , você deve estar bem.
Quanto a erros de tradução, isso depende de você. Faça o que fizer, certifique-se de documentar bem. Pessoalmente , geralmente passo adiante os erros gerados pelo framework conforme eles chegam até mim, já que nunca tenho certeza de que vou lidar com todos os códigos e traduzir todas as informações do usuário em algo mais específico para o meu projeto. As estruturas podem alterar e adicionar mais códigos ou alterar o significado dos códigos existentes, etc. Isso também me ajuda a identificar mais especificamente de onde veio o erro. Por exemplo, se minha estrutura StackKit gerar um erro no com.stackkit
domínio, sei que é um problema de estrutura. No entanto, se gerar um erro no NSURLErrorDomain
, então sei que veio especificamente do mecanismo de carregamento de URL.
O que você poderia fazer é capturar o erro quadro gerado e envolvê-la em um novo objeto de erro que tenha o seu domínio e de um código genérico, algo como kFrameworkErrorCodeUnknown
ou algo assim, e em seguida, coloque o erro capturado na userInfo
sob a NSUnderlyingErrorKey
. CoreData faz muito isso (por exemplo, se você tentar save:
um NSManagedObjectContext
, mas tiver erros de integridade de relacionamento, receberá um único erro de volta, mas NSUnderlyingErrorKey
conterá muito mais informações, como especificamente quais relacionamentos estão errados, etc).