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

この問題を抱えている可能性のある他の人のために:

この方法で audiosession プロパティを取得するには、AudioToolboxフレームワークが必要です。そのライブラリをプロジェクトに追加してインポートすると、リンカー エラーはなくなります。

于 2013-06-16T21:28:19.433 に答える