Ссылка на код ошибки для OSX/Cocoa

Если я получаю результат кода ошибки из функции Cocoa, есть ли простой способ выяснить, что это значит (кроме как grepping через все файлы .h в пакетах структуры)?

Ответы

Ответ 1

Вы должны посмотреть заголовок <Framework/FrameworkErrors.h> для любой структуры, из которой вы используете метод, возвращающий ошибку.

Например, NSError в домене Cocoa, который вы получаете из метода в рамках Foundation, будет иметь свойство code, описанное в заголовке <Foundation/FoundationErrors.h>. Аналогично AppKit и <AppKit/AppKitErrors.h> и Core Data и <CoreData/CoreDataErrors.h>.

Кроме того, если вы напечатаете описание NSError в отладчике, оно должно содержать не только домен и код ошибки, но также и имя фактической константы кода ошибки, чтобы вы могли найти ее в ссылке на API.

Ответ 2

В разделах "Домены ошибок" и "Коды ошибок" в Apple Руководство по программированию ошибок") это достаточно хорошо. Вам необходимо сделать следующее:

  • Запишите ошибку, принимая во внимание как домен ошибки (строка с правами человека /Googleable, в которой указывается, где искать определения кода ошибки), так и сам код ошибки (целое число)

  • Обнюхайте в Google (или прочитайте из приведенного ниже списка) и укажите имя файла заголовка, где определены коды ошибок для этого домена ошибки

  • Найдите эти файлы заголовков для полученного кода ошибки. Вы должны найти как постоянное имя для кода ошибки (например, ENOMEM), так и, надеюсь, также пояснительный комментарий (например, /* Cannot allocate memory */), объясняющий, что означает ошибка. Если нет комментариев, а постоянное имя не является само собой разумеющимся, просто укажите имя пользователя Google, и вы, вероятно, найдете подходящее описание.

Некоторые файлы заголовков основных доменов ошибок:

NSCocoaErrorDomain

Объявления кода ошибки распространяются на три файла заголовка:

  • <Foundation/FoundationErrors.h> (Коды ошибок Generic Foundation)
  • <AppKit/AppKitErrors.h> (Коды ошибок Generic AppKit)
  • <CoreData/CoreDataErrors.h> (коды ошибок основных данных)

NSURLErrorDomain

Проверьте NSURLError.h

NSXMLParserErrorDomain

Проверка NSXMLParser.h

NSMachErrorDomain

Проверьте /usr/include/mach/kern_return.h

NSPOSIXErrorDomain

Проверьте /usr/include/sys/errno.h

NSOSStatusErrorDomain

Проверка

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

Ответ 3

Кроме того, Cocoa NSError предназначен для отображения конечным пользователям. Если вы просто зарегистрируете его, он должен быть доступен для чтения.

Если вы говорите об Carbon OSStatus и таких, MacErrors.h.

Ответ 4

Для ошибок NSError добавьте строку кода:

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.