我正在尝试根据音频是否已播放来设置我的AVAudioSession类别,在阅读Apple Dev Docs for AVAudioSession后,我想出了这个代码,直接从他们的解决方案中获取我想要完成的内容:
UInt32 otherAudioIsPlaying; // 1
UInt32 propertySize = sizeof (otherAudioIsPlaying);
AudioSessionGetProperty ( // 2
kAudioSessionProperty_OtherAudioIsPlaying,
&propertySize,
&otherAudioIsPlaying
);
if (otherAudioIsPlaying) { // 3
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryAmbient
error: nil];
} else {
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategorySoloAmbient
error: nil];
}
所有内容都正确编译,但是当我尝试构建并运行应用程序时,我得到与AudioSessionGetProperty
对应的Mach-O链接器错误。
Undefined symbols for architecture i386:
"_AudioSessionGetProperty", referenced from:
+[AppDelegate setAudioSession] in AppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我将AVFoundation/AVFoundation.h
文件导入到我的AppDelegate(代码正在执行的地方)。 我还将AVFoundation框架导入到项目二进制文件本身。我错过了这个方法所需的另一个框架吗?为什么我会收到此错误?
答案 0 :(得分:3)
对于可能遇到此问题的其他人:
为了以这种方式获取音频属性,它需要AudioToolbox
框架。将该库添加到项目中并导入它,链接器错误将消失。