Tut mir leid, dass ich diese Frage gestellt habe. Ich weiß in Java, wir erweitern Exception-Klasse für benutzerdefinierte Ausnahmen. Aber dafür sehe ich keine Szenarien in Ziel c.
Also meine Frage, ist es eine gute Praxis, NSError zu erweitern und benutzerdefinierte Fehler einzuführen? Wenn ja, wann sollten wir die NSError-Klasse erweitern. Ich habe auch die Dokumentation überprüft. Aber ich kann keine übersteuernden Notizen für NSError sehen.
Ich habe es noch nie gesehen und das liegt daran, dass NSError
bereits sehr vielseitig ist. Es ermöglicht die Definition des Fehlertyps, indem die Eigenschaften domain
und code
festgelegt werden und beliebige zusätzliche Informationen im userInfo
-Dokument angefügt werden können.
Also, nein, es ist keine gute Übung.
Obwohl ich zustimme, dass du NSError
nicht ableiten solltest, ist es sehr nützlich, Kategorien darauf zu legen, und das tue ich regelmäßig. Angenommen, Ihr System veröffentlicht häufig Fehler, die von einem JSON-Block stammen. Ich würde es sehr praktisch finden, eine Kategorie wie folgt zu erstellen:
Ich schreibe oft kleine Helfer, um NSError
einfacher zu konstruieren, konstruiere die Benutzerinfo so, wie ich will, und ziehe Daten aus der Benutzerinfo zurück, ohne dass Anrufer ihre interne Darstellung kennen müssen. 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 das Ändern der Implementierungsdetails Ihrer Fehlerbehandlung.
In der Dokumentation ist geschrieben, dass es ok ist, Unterklasse:
Anwendungen können beispielsweise Unterklassen von NSError erstellen, um bessere lokalisierte Fehlerzeichenfolgen durch Überschreiben bereitzustellen lokalisierte Beschreibung.
In meinem Fall arbeite ich mit OSStatus , das Int32 ist. NSError-Konstruktor unterstützt nur Int . Also muss ich es ableiten, um OSSStatus zu unterstützen.
Es ist keine schlechte Idee, NSError zu erweitern.
Ich habe auch eine Kategorie auf NSError
für meinen eigenen Gebrauch gemacht. Ich würde es gerne mit dir teilen.
(1) Erstellen Sie eine Datei strings
, um alle Fehlercodes zu definieren:
(2) Erstellen Sie eine Kategorie für NSError, sagen wir "NSError + ErrorInfo":
%Vor%(3) Definieren Sie es:
%Vor%(4) Nutze es:
%Vor%Tags und Links objective-c ios nserror