systemSound 不再适用于使用 ARC 升级的 Xcode 4.5.2

Posted

技术标签:

【中文标题】systemSound 不再适用于使用 ARC 升级的 Xcode 4.5.2【英文标题】:systemSound no longer working with upgraded Xcode 4.5.2 using ARC 【发布时间】:2012-11-27 23:30:24 【问题描述】:

对于播放快速声音,我更喜欢 SystemSound 而不是 AudioPlayer,因为加载时间更快。但是现在我已经升级到 Xcode 4.5.2 并且使用 ARC 我的代码来播放音频 sn-ps 不再有效。请参阅下面的完整代码。我得到的错误来自以下行: AudioservicesCreateSystemSoundID((CFURLRef)filePath, &soundID);我收到带有以下错误消息的红色错误:Cast of Objective type NSURL to C pointer type CFURL (aka const dtruct)。有什么想法可以替换这条线吗??`

NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath],   @"/click.mp3"];

SystemSoundID soundID;

NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];

// here is the problem line 
     AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);

AudioServicesPlaySystemSound(soundID);

【问题讨论】:

试试AudioServicesCreateSystemSoundID((__bridge CFURLRef)filePath, &soundID); @RoboticCat - 感谢您的尝试,但我尝试了并收到链接器错误消息 - 还有其他想法吗?? 【参考方案1】:

使用 ARC,您需要使用 __bridge 在 Foundation 和 Core Foundation 之间进行免费桥接。

试试这个:

CFURLRef url = (__bridge CFURLRef)filePath;
AudioServicesCreateSystemSoundID(url, &soundID);

【讨论】:

谢谢 - 但这会引发 3 个链接器错误,如下所示:体系结构 i386 的未定义符号:“_AudioServicesCreateSystemSoundID”,引用自:- [ViewController sound2:] in ViewController.o “_AudioServicesPlaySystemSound”,引用自: - [ViewController sound2:] 在 ViewController.o ld 中:未找到架构 i386 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) 不,我没有 - 我有 - 刚刚添加了 AudioToolbox,一切正常 - 做得好,谢谢!!!

以上是关于systemSound 不再适用于使用 ARC 升级的 Xcode 4.5.2的主要内容,如果未能解决你的问题,请参考以下文章

OC基础--ARC的基本使用

为啥使用 KML 数据检索适用于 Android 的 Google 路线不再有效? [复制]

Proguard 不再适用于 Retrofit

UnsafePointer 不再适用于 swift 3

Cordova:getUserMedia() 不再适用于不安全的来源

YouTube 嵌入 UIWebViews 不再适用于 iOS