Как Вы преобразовываете код iPhone OSStatus во что-то полезное?

Я получаю больше, чем немного больной от этого iPhone SDK и его документации...

Я называю AudioConverterNew

в документации при Возвратах: это говорит, "возвращает код состояния"... в самом деле...

до сих пор посредством проигрывания вокруг с параметрами я только смог получить две различных ошибки, ни одна из которых перечислены у основания Аудио ссылки Преобразователя.

они - 'mrep' и'? tmf' (кастинг OSStatus к массиву символов), но определенные коды не являются действительно точкой.

насколько я могу сказать, коды случайной ошибки определяются в случайных файлах, таким образом, Вы не можете только искать один файл, я не могу найти документ справки, который просто позволяет Вам искать код ошибки для получения большего количества информации, и от того, что я могу сказать в OS X, можно ли использовать GetMacOSStatusErrorString () для преобразования ошибки во что-то полезное, но нет никакого эквивалентного iPhone?

любая справка значительно ценилась бы.

Править:

хорошо, так кастинг их дает им наоборот (что-то, что я проверил на 'mrep', но не был там так или иначе кругл), fmt? находится в списке для Аудио API Преобразователя и симпатичен сам объяснительный, если немного неопределенный, но достаточно ярмарка, все еще 'перманент' не там (хотя это могло бы быть что-то, чтобы сделать со средством моделирования, не поддерживающим aac декодирующий), и мой общий вопрос все еще стоит.

64
задан pkamb 23 October 2018 в 23:23
поделиться

1 ответ

Нет. Не полностью.

Некоторые OSStatus представляют собой четырехсимвольные коды, поэтому вы можете использовать (извлеченный из примера кода iPhone SDK "CAXException.h")

static char *FormatError(char *str, OSStatus error)
{
    // see if it appears to be a 4-char-code
    *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);
    if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
        str[0] = str[5] = '\'';
        str[6] = '\0';
    } else {
        // no, format it as an integer
        sprintf(str, "%d", (int)error);
    }
    return str;
}

(См. iOS/C: Преобразовать "integer" в четырехсимвольную строку для еще нескольких способов преобразования четырехсимвольных символов в строку, включая Swift)

NSError's NSOSStatusErrorDomain способен декодировать некоторые ошибки операционной системы. Смотрите ответ @tomk.

Если вам не нужно декодировать номер в программе для пользователя, вы можете использовать скрипт macerror, чтобы вручную узнать его значение, как указано в @lros's answer. Список поддерживаемых OSStatus можно найти в его исходных кодах в /System/Library/Perl/Extras/5.18/Mac/Errors.pm.

Существует также онлайновый сервис http://osstatus.com/, собирающий ошибки из всех публичных фреймворков. Они все еще не полностью завершены, например, не хватает упомянутого в комментарии отображения на -12792. Возможно, это код из частной структуры.

30
ответ дан 24 November 2019 в 15:42
поделиться