Fehlercode-Referenz für OSX/Cocoa
Frage
Wenn ich von einer Cocoa-Funktion einen Fehlercode erhalte, gibt es eine einfache Möglichkeit, herauszufinden, was das bedeutet (außer indem ich alle .h-Dateien in den Framework-Bundles durchsuche)?
Lösung
Sie sollten sich das ansehen <Framework/FrameworkErrors.h>
-Header für das Framework, von dem die von Ihnen verwendete Methode stammt, die einen Fehler zurückgibt.
Zum Beispiel ein NSError
in der Cocoa-Domäne, die Sie von einer Methode im Foundation-Framework erhalten, wird dies der Fall sein code
beschriebene Eigentum <Foundation/FoundationErrors.h>
Header.Ebenso mit AppKit und <AppKit/AppKitErrors.h>
und Kerndaten und <CoreData/CoreDataErrors.h>
.
Auch wenn Sie die Beschreibung des ausdrucken NSError
Im Debugger sollte es nicht nur die Fehlerdomäne und den Code enthalten, sondern auch den Namen der tatsächlichen Fehlercodekonstante, damit Sie diese in der API-Referenz nachschlagen können.
Andere Tipps
Die Abschnitte zu „Fehlerdomänen“ und „Fehlercodes“ in Apples Programmierhandbuch zur Fehlerbehandlung gehe das einigermaßen gut an.Sie müssen Folgendes tun:
Protokollieren Sie den Fehler und notieren Sie sich beide Fehlerdomäne (eine für Menschen lesbare/googlebare Zeichenfolge, die Ihnen sagt, wo Sie nach den Fehlercodedefinitionen suchen müssen) und die Fehlercode selbst (eine Ganzzahl)
Stöbern Sie bei Google (oder lesen Sie die Liste unten) und finden Sie den Namen der Header-Datei(en) heraus, in der die Fehlercodes für diese Fehlerdomäne definiert sind
Durchsuchen Sie diese Header-Dateien nach dem Fehlercode, den Sie erhalten haben.Sie sollten sowohl einen konstanten Namen für den Fehlercode finden (wie
ENOMEM
), und hoffentlich auch einen erläuternden Kommentar (wie/* Cannot allocate memory */
) erklärt, was der Fehler bedeutet.Wenn kein Kommentar vorhanden ist und der Konstantenname nicht selbsterklärend ist, googeln Sie einfach den Konstantennamen und Sie werden wahrscheinlich eine passende Beschreibung finden.
Einige Header-Dateien der Hauptfehlerdomänen:
NSCocoaErrorDomain
Fehlercodedeklarationen sind auf drei Header-Dateien verteilt:
<Foundation/FoundationErrors.h>
(Generische Foundation-Fehlercodes)<AppKit/AppKitErrors.h>
(Generische AppKit-Fehlercodes)<CoreData/CoreDataErrors.h>
(Core Data-Fehlercodes)
NSURLErrorDomain
Überprüfen NSURLError.h
NSXMLParserErrorDomain
ÜberprüfenNSXMLParser.h
NSMachErrorDomain
Überprüfen /usr/include/mach/kern_return.h
NSPOSIXErrorDomain
Überprüfen /usr/include/sys/errno.h
NSOSStatusErrorDomain
Überprüfen
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h
Außerdem soll der NSError von Cocoa für den Endbenutzer sichtbar sein.Wenn Sie es einfach protokollieren, sollte es lesbar sein.
Wenn Sie über Carbons OSStatus und dergleichen sprechen, MacErrors.h.
Für NSError-Fehler fügen Sie eine Codezeile hinzu:
NSError *error;
// ... Some code that returns an error
// Get the error as a string
NSString *s = [error localizedDescription];
// Observe the code for yourself or display to the user.