IPhone SDK: Ошибка аудиосеанса: -12986 .... после обновления до 3.1 - PullRequest
2 голосов
/ 09 октября 2009

Я создаю аудио приложение для iPhone, используя Audio Sessions. Прототип работал, пока я не решил обновить до 3.1

После долгих поисков я наконец обнаружил, что вызов активации сеанса не удался с кодом ошибки 12986. Я не смог найти причину этого нигде. Объект NSError не дает никаких подробностей. Я использовал локализованные * API для получения дополнительной информации, и вот что я получил:

localizedDescription: Операция не может быть завершена. ( OSStatus error -12986 .) localizedFailureReason: <blank>

localizedRecoverySuggestion: <blank>

Кто-нибудь знает, как найти дополнительную информацию о таких кодах ошибок?

Тем временем я буду продолжать копать и обновлять это, если мой статус изменится.

Мой код для любопытных -

NSError *myErr;
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
bSuccess= [audioSession setActive: YES error: &myErr];  

Ответы [ 2 ]

6 голосов
/ 09 октября 2009

Не знаю точно, что означает 12986, но похоже, что он сейчас привязан к звуковым возможностям устройства. И у меня есть решение!

Я заметил, что эта ошибка появляется только тогда, когда я использую iTouch, а не на IPhone. Так как я устанавливал категорию сеанса как PlayAndRecord на и , я решил проверить, не мешало ли это на iTouch. Сделал код немного умнее, чтобы определить, если AudioInputIsAvailable, а затем установить соответствующую категорию (PlayBack на ITouch и PlayAndRecord на iPhone). Это исправило!

Похоже, что это игнорировалось в предыдущих SDK. Я ничего не изменил ранее. : -)

Исправленный код ниже:

NSError *myErr;
BOOL    bSuccess = FALSE;
BOOL    bAudioInputAvailable = FALSE;

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
bAudioInputAvailable= [audioSession inputIsAvailable];

if( bAudioInputAvailable)
{
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
}
else {
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:&myErr];
}
bSuccess= [audioSession setActive: YES error: &myErr];  

if(!bSuccess)
{
    NSLog(@"Unable to Start Audio Session. Terminate Application.");
    NSLog([myErr localizedDescription]);
    NSLog([myErr localizedFailureReason]);
    NSLog([myErr localizedRecoverySuggestion]);
}
0 голосов
/ 09 октября 2009

У меня возникли аналогичные проблемы при попытке извлечь полезную информацию из объекта ошибки, а также при выполнении операций с основными данными. Я обнаружил, что следующий код помогает более точно определить причину ошибки.

NSError *error;

... your code here ...

NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
if(detailedErrors != nil && [detailedErrors count] > 0) 
{
    for(NSError* detailedError in detailedErrors) 
    {
        NSLog(@"  DetailedError: %@", [detailedError userInfo]);
    }
}
else 
{
    NSLog(@"  %@", [error userInfo]);
}

Извините, я не смог вам помочь с вашей проблемой со звуком.

НТН

...