我正在使用音频会话构建iPhone音频应用。 Prototype正在运行,直到我决定升级到3.1
经过大量的搜索后,我终于发现会话激活调用失败,错误代码为12986。 我无法在任何地方找到原因。 NSError对象不提供任何细节。我使用本地化的* API获取更多信息,这就是我得到的:
localizedDescription:无法完成操作。 ( OSStatus错误-12986 。)
localizedFailureReason:<blank>
localizedRecoverySuggestion:<blank>
任何人都知道如何找到有关此类错误代码的更多信息?
与此同时,如果状态发生变化,我会继续挖掘和更新。
好奇的代码是 -
NSError *myErr;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
bSuccess= [audioSession setActive: YES error: &myErr];
答案 0 :(得分:6)
不知道12986的含义是什么,但它现在似乎与设备的音频功能相关联。我有一个解决方案!
我注意到只有当我使用iTouch而不是在iPhone上时才出现此错误。由于我在 上将会话类别设置为 PlayAndRecord ,因此我决定检查它是否在iTouch上搞砸了。使代码更聪明一点,以检测是否AudioInputIsAvailable
,然后相应地设置类别(在ITouch上PlayBack
和在iPhone上PlayAndRecord
。修好了!
因此在之前的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]);
}
答案 1 :(得分:0)
我在尝试从核心数据操作中提取错误对象中的有用信息时遇到了类似的问题,我发现以下代码有助于更准确地确定错误原因。
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