Справочник по кодам ошибок для OSX/Cocoa

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


person Kristopher Johnson    schedule 01.09.2008    source источник


Ответы (4)


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

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

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

person Chris Hanson    schedule 01.09.2008
comment
Тогда может не быть домена ошибок, специфичного для UIKit, с кодами ошибок, специфичными для UIKit. - person Chris Hanson; 12.11.2010

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

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

  2. Покопайтесь в Google (или прочитайте список ниже) и выясните имя заголовочного файла (файлов), в котором определены коды ошибок для этого домена ошибок.

  3. Найдите в этих заголовочных файлах код ошибки, который вы получили. Вы должны найти как постоянное имя для кода ошибки (например, 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
person Mark Amery    schedule 14.10.2013

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

Если вы говорите об OSStatus Carbon и тому подобном, MacErrors.h.

person Community    schedule 16.09.2008

Для ошибок 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.   
person Will    schedule 18.07.2014