AudioSessionInitialize возвращает непостижимый код ошибки - PullRequest
0 голосов
/ 14 ноября 2009

Я звоню AudioSessionInitialize вот так

OSStatus result = AudioSessionInitialize(NULL,NULL,interruptionListener,NULL);

и получение результата 0xbfffde94 (т. Е. -1073750040), который не совпадает ни с чем в документации, которые все читаемые 4CC как '!ini' и т.

Хорошая новость заключается в том, что похоже на вызов. Тем не менее, кто-нибудь может пролить свет на этот код ошибки?

РЕДАКТИРОВАТЬ: вышеуказанный код ошибки возвращается в симуляторе. На устройстве код ошибки 2fffe810.

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

Я понял это. Я идиот. Была ошибка в макросе, который у меня был, оборачивая вызов и сообщая об ошибке, который дважды вызывал AudioSessionInitialize. Это не совсем объясняет код ошибки, который я видел, но об этом не стоит задумываться.

ОБНОВЛЕНИЕ: На самом деле, это довольно грубая помеха, поэтому я собираюсь объяснить.

Макрос-нарушитель изначально был:

#define CHECK(S) { OSStatus err = (S); if (S) printf("Error %x at \"%s\"\n", err, #S);}

так что ошибка # 1 - это if (S), которая должна быть, если if (err). Поэтому я повторяю каждый звонок в аудиосистему, которая объясняет различные другие странные вещи, поэтому я очень рад, что попытался выяснить, что казалось безобидной аномалией. В этом случае второй звонок жаловался, что аудио сеанс уже был инициализирован.

Но почему странный код ошибки? Я хотел увидеть 4CC, поэтому я изменил макрос на этот, неся ошибку:

#define CHECK(S) { OSStatus err[2] = {S,0}; if (S) printf("Error %x '%4s' at \"%s\"\n", err, &err, #S); }

(Второй OSStatus 0 завершает строку, определенную первым OSStatus 4CC, поэтому я могу напечатать его в формате %s.) Но я забыл изменить err на err[0], так что он действительно печатал адрес массива err. Я уверен, что теперь это правильно:

#define CHECK(S) { OSStatus err[2] = {S,0}; if (*err) printf("Error %x '%4s' at \"%s\"\n", *err, err, #S); }
1 голос
/ 16 ноября 2009

Поскольку эти результаты являются поддельными и не определены или не описаны Apple, у меня остается только одно предположение; у вас установлена ​​странная смесь Frameworks - возможно, старые версии смешаны с новыми. Поэтому все, что я мог бы порекомендовать, это переустановить весь iPhone SDK.

0 голосов
/ 14 мая 2013

Посмотрите на переменную OSStatus в списке переменных отладчика (внизу слева). Щелкните правой кнопкой мыши по нему и выберите View Value As-> Bytes (Hex with ASCII). Прочитайте четырехбуквенный код в обратном порядке. * Он должен соответствовать одному из документированных кодов результата.

Значение 1768843636 составляет 74 69 6e 69, если смотреть таким образом. Рядом с этим в окне отладки отображается «tini». Переверните это, и вы получите 'init', который, как сказано в документации, kAudioSessionAlreadyInitialized.

* Нет, я не знаю почему.

...