1

我正在尝试根据音频是否已经在播放来设置我的 AVAudioSession 类别,在阅读了 AVAudioSession 的 Apple Dev Docs 之后,我想出了这段代码,直接取自他们的解决方案,以实现我想要完成的任务:

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];
}

一切都正确编译,但是当我尝试构建和运行应用程序时,我收到一个 Mach-O 链接器错误,对应于AudioSessionGetProperty.

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 框架导入到项目二进制文件本身中。我是否缺少此方法所需的另一个框架?为什么我会收到此错误?

4

1 回答 1

3

对于其他可能遇到此问题的人:

为了以这种方式获取音频会话属性,它需要AudioToolbox框架。将该库添加到您的项目并导入它,链接器错误就会消失。

于 2013-06-16T21:28:19.433 回答