CFURLRef需要桥接投射错误

rob*_*r77 5 audio url objective-c ios

我想要播放声音,但是当我编码时:

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject);
Run Code Online (Sandbox Code Playgroud)

它会引发以下错误:

将Objective-C指针类型'NSURL*'转换为C指针类型'CFURLRef'(又名'const struct __CFURL*')需要桥接转换错误

我尝试了以下两个建议的解决方案:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);
Run Code Online (Sandbox Code Playgroud)

要么

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject);
Run Code Online (Sandbox Code Playgroud)

但我仍然无法发挥声音.

我想问题是:声音不起作用的桥接错误,还是我应该在哪里寻找其他地方?

我可以使用SysSound示例代码播放声音,我使用的是iOS 6和Xcode 4.5.

感谢任何指针:)

idz*_*idz 9

演员可能不是声音不播放的原因:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject);
Run Code Online (Sandbox Code Playgroud)

很好.

很可能您的错误出现在您未向我们展示过的代码中.常见问题是URL创建错误或文件格式无效.

修改您的代码如下:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject);
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status);
Run Code Online (Sandbox Code Playgroud)

并检查您获得的状态代码; parmErr(-50)相对常见,通常表示您的网址为零.

哦,还有一个想法,你没有显示你实际播放声音的位置.你知道AudioServicesCreateSystemSoundID实际上并没有播放声音.你需要打电话:

AudioServicesPlaySystemSound(soundFileObject);
Run Code Online (Sandbox Code Playgroud)

如果你已经知道的话,道歉!