Je l'ai compris. Je suis un idiot. Il y avait une erreur dans la macro que j'avais enveloppant l'appel & rapportant l'erreur, qui a appelé l'AudioSessionInitialize deux fois. Cela n'explique pas tout à fait le code d'erreur que j'ai vu, mais ça ne vaut pas la peine de s'interroger. MISE À JOUR: En fait, c'est une belle farce, donc je vais vous expliquer.
La macro incriminée était à l'origine:
#define CHECK(S) { OSStatus err = (S); if (S) printf("Error %x at \"%s\"\n", err, #S);}
donc bug # 1 est le if (S)
qui devrait être le cas if (err)
. Par conséquent, je répète tous les appels au système audio, ce qui explique d'autres choses étranges, alors je suis très heureux d'avoir essayé de comprendre ce qui semblait être une anomalie inoffensive. Dans ce cas, le second appel s'est plaint que la session audio était déjà initialisée.
Mais pourquoi le code d'erreur bizarre? Je voulais voir de la 4CC donc je changé la macro à cela, portant l'erreur le long:
#define CHECK(S) { OSStatus err[2] = {S,0}; if (S) printf("Error %x '%4s' at \"%s\"\n", err, &err, #S); }
(Le deuxième OSStatus de 0 termine la chaîne définie par la 4CC première OSStatus, donc je peux l'imprimer au format %s
.) Mais j'ai oublié de changer err
à err[0]
, donc il était en effet l'impression de l'adresse du tableau err
. Ce que je suis assez sûr est correcte maintenant:
#define CHECK(S) { OSStatus err[2] = {S,0}; if (*err) printf("Error %x '%4s' at \"%s\"\n", *err, err, #S); }
Bizarre. Est-ce sur l'appareil ou le simulateur? Ou les deux? –
Bonne question. Tous les deux. – Grumdrig
Incidemment, de la façon dont tout cela se comporte, j'ai un peu l'impression que ces chiffres retournés sont des adresses de mémoire.J'ai inspecté la mémoire et cela ressemblait un peu à du stockage pour différentes variables. (Par exemple, la similarité dans les groupes de 4 octets.) Il y avait 4 octets de 0 à l'adresse retournée. – Grumdrig