送信するコールバックを登録しようとしています
AudioSessionAddPropertyListener
これは、オーディオ プロパティの変更があった場合に通知します (たとえば、ヘッドフォンのプラグが抜かれているなど)。
iOS docsおよび別のフォーラムでも、コードを実装ブロックの外に配置し、呼び出しを使用して ViewController を取得できることが示されているため、インスタンス変数にアクセスできます。
簡単な例は次のとおりです。
#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <Foundation/Foundation.h>
void audioRouteChangeListenerCallback (
void *inUserData,
AudioSessionPropertyID inPropertyID,
UInt32 inPropertyValueSize,
const void *inPropertyValue
) {
ViewController *controller = (ViewController *) inUserData;
}
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
@end
したがって、コールバックでは、ViewController を取得するために呼び出しをブリッジする必要があることがわかります。これを行うと、特定の変数にアクセスできなくなります。奇妙なことに、私は iOS サンプル (上記のリンク) をダウンロードしましたが、これはその場合に準拠しています。ここで何が間違っていますか??
編集:
コントローラーのインスタンスを取得するために呼び出しをブリッジすると、これが取得されます
ViewController *controller = (__bridge ViewController *) inUserData;
int isPlaying = controller->appSoundPlayer.playing;
appSoundPlayer が保護されているというエラーが表示されます。私が言ったように、りんごの例は何とかコンパイルされるので、ブリッジせずにこれを行う方法があると思いますが、私が何をしているのかわかりません