Während ich zustimme, dass Sie keine Unterklasse NSError
, es ist sehr nützlich, um Kategorien, und ich mache dies regelmäßig. Angenommen, Ihr System veröffentlicht häufig Fehler, die von einem JSON-Block stammen. Ich würde es sehr praktisch finden, wie eine Kategorie zu erstellen:
@interface NSError (MyErrors)
// Construct an NSError from data in JSON.
// Include full JSON response in the userInfo
+ (NSError *)myErrorWithJSON:(JSON *)json;
// Parse the text out of the user info
- (NSString *)myErrorMessage;
// The full JSON error block as a string
- (NSString *)myErrorJSON;
// BOOLs can be helpful sometimes, or you could return an enum for use in a switch.
- (BOOL)myIsNetworkError;
- (BOOL)myIsAuthError;
@end
ich oft kleine Helfer schreiben NSError
einfacher zu konstruieren, bauen die Userinfo, wie ich will, und die Pull-Daten wieder aus dem Userinfo ohne Anrufer muss seine interne Repräsentation kennen. Ich halte dies für eine sehr gute Form der Datenverbergung und ermutige dazu, aussagekräftigere Nachrichten zu verwenden.
Ähnlich, auch für kleinere Projekte, erstelle ich oft eine +myErrorWithCode:localizedDescription:
Kategorie-Methode. Ich kenne meine Domain, daher muss ich sie normalerweise nicht weitergeben, und das macht es viel einfacher, den Schlüssel NSLocalizedDescription
in den Benutzerinformationen festzulegen. Dies führt wiederum zu besseren Fehlern, da sie einfacher zu erstellen sind, und erleichtert die Änderung der Implementierungsdetails Ihrer Fehlerbehandlung.
Ich sehe nicht die Notwendigkeit als 'NSError' bietet eine Domain-Eigenschaft, die Sie festlegen können, was auch immer Domain-spezifischen Wert. Welchen Wert möchten Sie mit einer Unterklasse "NSError" hinzufügen? – trojanfoe
Ich dachte genauso. Aber lassen Sie uns Szenarien sagen, die mehr Informationen über den Fehler enthalten. Möglicherweise einige domänenspezifische Details. – uiroshan
Erneut, bereits von 'NSError' durch das Hinzufügen von Einträgen zum' userInfo'-Dictionary abgedeckt. – trojanfoe