我正在呼叫AudioSessionInitialize
OSStatus result = AudioSessionInitialize(NULL,NULL,interruptionListener,NULL);
并获得与文档中的任何内容都不匹配的结果0xbfffde94
(即-1073750040
),这些内容都是可读的4CC,如'!ini'
,等等。
好消息是似乎就像呼叫一样。不过,任何人都可以了解这个错误代码吗?
编辑:在模拟器中返回上述错误代码。在设备上,错误代码为2fffe810
。
答案 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。
*不,我不知道为什么。