Ссылка на код ошибки для 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.