objective-c - CFURLRef 需要桥接转换错误

标签 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。

感谢任何指点:)

最佳答案

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

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

很好。

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

修改你的代码如下:

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

并检查你得到的状态码; parmErr (-50) 比较常见,通常表示您的 URL 为 nil。

哦,还有一个想法,您没有显示实际播放声音的位置。您确实知道 AudioServicesCreateSystemSoundID 实际上并不播放声音。您需要调用:

AudioServicesPlaySystemSound(soundFileObject);

抱歉,如果您已经知道了!

关于objective-c - CFURLRef 需要桥接转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11703923/

相关文章:

ios - 如何使用 viewWillTransitionToSize 停止旋转

android - 从url读取文件

javascript - 需要身份验证的链接如何工作?

Objective-C:将图像与之前保存的另一张图像进行比较

ios - 展开到最后一个 View Controller

iphone - 我可以用 .m 文件中的类的子类覆盖属性的类吗?

iphone - 将文本字段的文本保留在模态视图 Controller 中

ios - 为什么升级到 ios-sdk8 后我的 UIImageView 不会拉伸(stretch)?

url - 网址错误 很多额外信息

ios - HealthKit 授权状态始终为 1