CFURLRef requirejs une erreur de moulage pontée

J'essaye d'get un son à jouer mais quand je code:

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject); 

il renvoie l'erreur suivante:

La conversion du type de pointeur 'NSURL *' vers le type de pointeur C 'CFURLRef' (alias 'const struct __CFURL *') nécessite une erreur de transtypage bridgée

J'ai essayé les deux solutions suivantes:

 AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

ou

 AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject); 

Mais je n'arrive toujours pas à faire jouer le son.

Je suppose que la question est: est-ce que l'erreur de pontage est la cause du son qui ne joue pas, ou devrais-je regarder ailleurs où?

Je peux get le son à jouer en utilisant l'exemple de code SysSound et j'utilise iOS 6 et Xcode 4.5.

Merci pour les pointeurs 🙂

La dissortingbution n'est probablement pas la raison pour laquelle le son ne joue pas:

 AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

c'est bien.

Votre erreur est probablement dans le code que vous ne nous avez pas montré. Un problème courant est une erreur dans la création de l'URL ou un format de file non valide.

Modifiez votre code comme suit:

 OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject); NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status); 

et vérifiez quel code d'état vous obtenez; parmErr (-50) est relativement commun et signifie généralement que votre URL est nulle.

Oh, et encore une fois, vous ne montrez pas où vous jouez réellement le son. Vous savez que AudioServicesCreateSystemSoundID ne joue pas réellement le son. Vous devez appeler:

 AudioServicesPlaySystemSound(soundFileObject); 

Toutes mes excuses si vous le saviez déjà!