0

でサウンドを再生するIBActionにリンクされたボタンがありますAudioServices。それAudioServicePlaySystemSoundはとリンクされています

AudioServicesAddSystemSoundCompletion(silenceID, NULL, NULL, callbackFunction, (__bridge void*) self);

それにもかかわらず、内部CallbackFunctionではIBActionメソッドを呼び出すことができません。実は、予約した作品を自分で使うことすらできません。C自体が自分が何であるかを知らないからかもしれないことがわかりました。

ありがとう。

4

1 に答える 1

2

C関数内からselfなどのポインタにアクセスすることはできません。これは、関数が実際にはクラスの一部ではないためです。selfでメソッドを呼び出すには、C関数からポインターselfにアクセスする方法を提供する必要があります。

幸い、callbackFunctionは2つの引数を受け入れます。最初の引数はサウンドIDであり、2番目の引数はAudioServicesAddSystemSoundCompletion関数で提供するデータです。(__bridge void*) self

void callbackFunction(SystemSoundID sound, void *data){
    //data is a pointer to self that you provide when you call AudioServicesAddSystemSoundCompletion
    [(MyClass*)data callMyIBAction];
}
于 2012-06-16T01:01:29.330 に答える