Personalmente utilizzo un dominio in stile DNS inverso. Per esempio:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
La terza parte del dominio ( @"myproject"
) è usata solo per differenziare gli errori di questo progetto ( "My Project"
) da quelli di un altro progetto ( "My Other Project"
=> com.davedelong.myotherproject
).
E 'un modo semplice per assicurare che io non ho intenzione di conflitto con i domini di errore di chiunque altro (se sto utilizzando il codice 3a parte), a meno che lo sviluppatore è volutamente cercando di pasticciare con solo me (che a mio avviso sarebbe altamente improbabile. ..).
Per quanto riguarda i conflitti di numerazione del codice, non preoccuparti. Finché i codici sono univoci all'interno di un dominio , dovresti essere OK.
Per quanto riguarda gli errori di traduzione, dipende da te. Qualunque cosa tu faccia, assicurati di documentarla bene. Personalmente , di solito trasmetto gli errori generati dal framework quando mi sono arrivati, poiché non sono mai abbastanza sicuro di gestire tutti i codici e tradurre tutte le informazioni utente in qualcosa di più specifico del mio progetto. I framework potrebbero cambiare e aggiungere più codici, o cambiare il significato di codici esistenti, ecc. Mi aiuta anche a identificare più specificamente da dove proviene l'errore. Ad esempio, se il mio framework StackKit genera un errore nel com.stackkit
dominio, so che è un problema del framework. Tuttavia, se genera un errore in NSURLErrorDomain
, allora so che proviene specificamente dal meccanismo di caricamento dell'URL.
Che cosa si potrebbe fare è catturare l'errore generato quadro e avvolgerlo in un nuovo oggetto errore che ha il vostro dominio e un codice generico, qualcosa di simile kFrameworkErrorCodeUnknown
o qualcosa del genere, e quindi posizionare l'errore catturato nel userInfo
sotto la NSUnderlyingErrorKey
. CoreData lo fa molto (ad esempio, se si tenta di eseguire save:
un NSManagedObjectContext
errore di integrità della relazione, ma si verificano errori di integrità della relazione, verrà restituito un singolo errore, ma NSUnderlyingErrorKey
conterrà molte più informazioni, come nello specifico quali relazioni sono sbagliate, ecc.).