Ich persönlich verwende eine Reverse-DNS-Domain. Beispielsweise:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
Der dritte Teil der Domäne ( @"myproject"
) wird nur verwendet, um die Fehler aus diesem Projekt ( "My Project"
) von Fehlern in einem anderen Projekt ( "My Other Project"
=> com.davedelong.myotherproject
) zu unterscheiden.
Dies ist eine einfache Möglichkeit, um sicherzustellen, dass ich nicht mit den Fehlerdomänen anderer in Konflikt gerate (wenn ich Code von Drittanbietern verwende), es sei denn, dieser Entwickler versucht absichtlich, sich nur mit mir anzulegen (was meiner Meinung nach höchst unwahrscheinlich ist. ..).
Machen Sie sich darüber keine Sorgen um Code-Nummerierungskonflikte. Solange Codes innerhalb einer Domain eindeutig sind , sollten Sie in Ordnung sein.
Die Übersetzung von Fehlern liegt bei Ihnen. Was auch immer Sie tun, stellen Sie sicher, dass Sie es gut dokumentieren. Persönlich gebe ich normalerweise nur vom Framework generierte Fehler weiter, wenn sie zu mir kommen, da ich nie ganz sicher bin, ob ich alle Codes verarbeiten und alle userInfo in etwas Spezifischeres für mein Projekt übersetzen werde. Die Frameworks können weitere Codes ändern und hinzufügen oder die Bedeutung vorhandener Codes usw. ändern. Außerdem kann ich genauer identifizieren, woher der Fehler stammt. Wenn mein StackKit- Framework beispielsweise einen Fehler in der com.stackkit
Domäne generiert , weiß ich, dass es sich um ein Framework-Problem handelt. Wenn es jedoch einen Fehler in der generiert NSURLErrorDomain
, weiß ich, dass es speziell vom URL-Lademechanismus stammt.
Was Sie könnten tun , ist das Framework erzeugt Fehler erfassen und in einem neuen Fehlerobjekt wickeln , die Ihre Domain und einen allgemeinen Code hat, so etwas wie kFrameworkErrorCodeUnknown
oder etwas, und dann den erfassten Fehler in der userInfo
unter der NSUnderlyingErrorKey
. CoreData macht dies häufig (wenn Sie beispielsweise versuchen, save:
eine NSManagedObjectContext
Beziehung herzustellen , aber Beziehungsintegritätsfehler haben, erhalten Sie einen einzelnen Fehler zurück, der jedoch NSUnderlyingErrorKey
viel mehr Informationen enthält, z. B. speziell, welche Beziehungen falsch sind usw.).
Ich habe nicht genug Repräsentanten, um Kommentare abzugeben, aber für die akzeptierte Antwort von Dave DeLong ist es möglicherweise etwas besser, sie
[[NSBundle mainBundle] bundleIdentifier]
anstelle von zu verwenden@"com.myName.myProject"
. Auf diese Weise wird der Name Ihres Projekts oder eines Projekts genau wiedergegeben.quelle
NSBundle.mainBundle().bundleIdentifier!
(Wenn Sie wissen, dass die Bundle-So erstellen Sie einen benutzerdefinierten NSError:
Erstellen Sie zunächst ein Wörterbuch der Fehlermeldung
Weisen Sie dann die userInfo dem NSDictionary zu und fertig.
quelle