IPhone SDK:音频会话错误:-12986。。。。升级到3.1之后

IPhone SDK:音频会话错误:-12986。。。。升级到3.1之后,iphone,core-audio,Iphone,Core Audio,我正在使用音频会话构建一个iPhone音频应用程序。原型一直在运行,直到我决定升级到3.1 经过多次搜索,我终于发现会话激活调用失败,错误代码为12986。 我在任何地方都找不到这样做的原因。 NSError对象没有给出任何细节。我使用本地化的*API来获取更多信息,这就是我得到的: localizedDescription:无法完成操作。(OSStatus错误-12986) 本地化失败原因: 本地化恢复建议: 有人知道如何找到更多关于此类错误代码的信息吗 同时,如果我的状态发生变化,我会继续挖

我正在使用音频会话构建一个iPhone音频应用程序。原型一直在运行,直到我决定升级到3.1

经过多次搜索,我终于发现会话激活调用失败,错误代码为12986。 我在任何地方都找不到这样做的原因。 NSError对象没有给出任何细节。我使用本地化的*API来获取更多信息,这就是我得到的:

localizedDescription:无法完成操作。(OSStatus错误-12986) 本地化失败原因:

本地化恢复建议:

有人知道如何找到更多关于此类错误代码的信息吗

同时,如果我的状态发生变化,我会继续挖掘和更新

我的好奇代码是-

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

在执行核心数据操作时,我在尝试从错误对象提取有用信息时也遇到了类似的问题,我发现以下代码有助于更精确地确定错误的原因

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]);
}
对不起,我不能帮你解决音频问题


HTH

不知道12986的确切含义,但它似乎与设备的音频功能有关。我有一个解决办法

我注意到这个错误只有在我使用iTouch时才会出现,而不是在IPhone上。由于我在上都将会话类别设置为播放和录制,因此我决定在iTouch上检查这是否弄糟了。使代码更加智能,可以检测
音频输入是否可用
,然后相应地设置类别(ITouch上的
播放
,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]);
}

请包括定义MyErrnsDetailedErrorKey的行,该行在3.1中似乎已停止使用:-(它没有在参考中列出,也没有编译。我很抱歉,它也没有记录在案,似乎NSDetailedErrorsKey只用于核心数据。因为它在CoreDataErrors.h文件中。@mustignup Listing 2-1@slf这个词来自bbum本人……非常感谢,我觉得缺少麦克风与此有关。The用户的iPod在AudioUnitInitialize中出现了同样的错误。我非常确信,更智能的会话处理会帮我解决这个问题。这篇文章是我在OSStatus错误代码-12986上发现的唯一一件事,我也确实遇到了同样的问题。干杯