Если я получаю результат кода ошибки из функции Cocoa, есть ли простой способ выяснить, что это значит (кроме поиска по всем файлам .h в пакетах фреймворка)?
Справочник по кодам ошибок для OSX/Cocoa
Ответы (4)
Вы должны посмотреть заголовок <Framework/FrameworkErrors.h>
для любой платформы, из которой исходит метод, который вы используете, который возвращает ошибку.
Например, свойство NSError
в домене Cocoa, которое вы получаете из метода в структуре Foundation, будет иметь свойство code
, описанное в заголовке <Foundation/FoundationErrors.h>
. Аналогично с AppKit и <AppKit/AppKitErrors.h>
и Core Data и <CoreData/CoreDataErrors.h>
.
Кроме того, если вы напечатаете описание NSError
в отладчике, оно должно включать не только домен и код ошибки, но и имя фактической константы кода ошибки, чтобы вы могли найти ее в справочнике по API.
Разделы «Домены ошибок» и «Коды ошибок» в документе Apple Руководство по программированию обработки ошибок решает эту проблему достаточно хорошо. Вам необходимо сделать следующее:
Зарегистрируйте ошибку, принимая во внимание как домен ошибки (строка, удобочитаемая для человека или Google, которая указывает, где искать определения кода ошибки), так и сам код ошибки. (целое число)
Покопайтесь в Google (или прочитайте список ниже) и выясните имя заголовочного файла (файлов), в котором определены коды ошибок для этого домена ошибок.
Найдите в этих заголовочных файлах код ошибки, который вы получили. Вы должны найти как постоянное имя для кода ошибки (например,
ENOMEM
), так и пояснительный комментарий (например,/* Cannot allocate memory */
), объясняющий, что означает ошибка. Если комментариев нет, а имя константы не говорит само за себя, просто введите имя константы в Google, и вы, вероятно, найдете подходящее описание.
Некоторые заголовочные файлы основных доменов ошибок:
NSCocoaErrorDomain
Объявления кодов ошибок распределены по трем заголовочным файлам:
<Foundation/FoundationErrors.h>
(общие коды ошибок Foundation)<AppKit/AppKitErrors.h>
(Общие коды ошибок 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
Кроме того, NSError Cocoa предназначен для отображения конечному пользователю. Если вы просто зарегистрируете его, он должен быть читаемым.
Если вы говорите об OSStatus Carbon и тому подобном, MacErrors.h.
Для ошибок 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.