framework cocoa xcode osx

framework - Referencia de código de error para OSX/Cocoa



cocoa touch layer (4)

Si obtengo un resultado de código de error de una función Cocoa, ¿hay alguna manera fácil de descubrir lo que significa (aparte de grepping a través de todos los archivos .h en los paquetes de framework)?


Debería ver el encabezado <Framework/FrameworkErrors.h> para cualquier marco de trabajo que el método que está utilizando y que devuelve un error.

Por ejemplo, un NSError en el dominio Cocoa que obtiene de un método en el marco de Foundation tendrá su propiedad de code descrita en el encabezado <Foundation/FoundationErrors.h> . De manera similar con AppKit y <AppKit/AppKitErrors.h> y Core Data y <CoreData/CoreDataErrors.h> .

Además, si imprime la descripción del NSError en el depurador, debe incluir no solo el dominio y el código de error, sino también el nombre de la constante del código de error real para que pueda buscarlo en la referencia de la API.


Además, el NSError de Cocoa está destinado a ser visible para el usuario final. Si solo lo registra, debería ser legible.

Si estás hablando de OSStatus de Carbon y tal, MacErrors.h.


Las secciones sobre "Dominios de error" y "Códigos de error" en la Guía de programación de manejo de errores de Apple abordan esto razonablemente bien. Debes hacer lo siguiente:

  1. Registre el error, teniendo en cuenta tanto el dominio de error (una cadena legible por humanos / Googleable que le dice dónde buscar las definiciones de código de error) y el código de error en sí (un número entero)

  2. Busque en Google (o lea de la lista a continuación) y descubra el nombre de los archivos de encabezado donde se definen los códigos de error para ese dominio de error

  3. Busque en esos archivos de encabezado el código de error que obtuvo. Debería encontrar tanto un nombre constante para el código de error (como ENOMEM ), y con suerte también un comentario explicativo (como /* Cannot allocate memory */ ) explicando lo que significa el error. Si no hay comentarios, y el nombre de la constante no se explica por sí solo, solo busca el nombre de la constante y probablemente encontrarás una descripción adecuada.

Algunos archivos de encabezado de los principales dominios de error:

NSCocoaErrorDomain

Las declaraciones de código de error se distribuyen en tres archivos de encabezado:

  • <Foundation/FoundationErrors.h> (Códigos de error de Fundación genérica)
  • <AppKit/AppKitErrors.h> (códigos de error genéricos de AppKit)
  • <CoreData/CoreDataErrors.h> (códigos de error de Core Data)

NSURLErrorDomain

Ver NSURLError.h

NSXMLParserErrorDomain

Ver NSXMLParser.h

NSMachErrorDomain

Verifique /usr/include/mach/kern_return.h

NSPOSIXErrorDomain

Verifique /usr/include/sys/errno.h

NSOSStatusErrorDomain

Comprobar

/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h


Para los errores de NSError, agregue una línea de código:

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.