AudioSessionInitialize返回不可思议的错误代码

时间:2009-11-13 22:08:22

标签: iphone iphone-sdk-3.0 audio

我正在呼叫AudioSessionInitialize

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

并获得与文档中的任何内容都不匹配的结果0xbfffde94(即-1073750040),这些内容都是可读的4CC,如'!ini',等等。

好消息是似乎就像呼叫一样。不过,任何人都可以了解这个错误代码吗?

编辑:在模拟器中返回上述错误代码。在设备上,错误代码为2fffe810

3 个答案:

答案 0 :(得分:1)

由于这些结果是假的,并没有被Apple定义或描述,我只剩下一个假设;你有一个奇怪的框架组合安装 - 可能旧版本与新版本混合。所以我建议的是重新安装整个iPhone SDK。

答案 1 :(得分:1)

我明白了。我是个白痴。在我打包电话的宏中出现错误&报告错误,该错误称为AudioSessionInitialize两次。这并没有完全解释我看到的错误代码,但肯定不值得怀疑。

更新:实际上这是非常闹剧,所以我要解释一下。

违规宏最初是:

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

所以错误#1是if (S)if (err)应该是#define CHECK(S) { OSStatus err[2] = {S,0}; if (S) printf("Error %x '%4s' at \"%s\"\n", err, &err, #S); } 。因此,我重复对音频系统的每次调用,这解释了各种其他奇怪的事情,所以我很高兴我试图弄清楚什么似乎是无害的异常。在这种情况下,第二个呼叫抱怨音频会话已经初始化。

但为什么奇怪的错误代码呢?我想看到4CC,所以我把宏改成了这个,带着错误:

%s

(第二个OSStatus为0终止了由4CC第一个OSStatus定义的字符串,因此我可以使用格式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}}

答案 2 :(得分:0)

查看调试器变量列表中的OSStatus变量(左下角)。右键单击它并选择View Value As-> Bytes(Hex with ASCII)。向后阅读4个字母的代码。*这应与其中一个记录的结果代码匹配。

当以这种方式观察时,值1768843636是74 69 6e 69。接下来,调试窗口显示'tini'。转过来然后你会得到'init',文档中说的是kAudioSessionAlreadyInitialized。

*不,我不知道为什么。