CFURLRef需要桥接投射错误

时间:2012-07-28 19:17:48

标签: objective-c ios url audio

我正试图播放声音,但是当我编码时:

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject);

它会抛出以下错误:

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

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

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

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

但我仍然无法播放声音。

我想问题是:声音没有播放的原因是桥接错误,还是我应该在其他地方寻找?

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

感谢您的任何指示:)

1 个答案:

答案 0 :(得分:9)

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

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

很好。

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

修改您的代码,如下所示:

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

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

哦,还有一个想法,你没有表明你实际上在播放声音的地方。你知道AudioServicesCreateSystemSoundID实际上并没有发出声音。你需要打电话:

AudioServicesPlaySystemSound(soundFileObject);

如果您已经知道,请道歉!