2011-08-02 12 views
0

kAudioSessionProperty_AudioRouteChangeのオーディオセッションプロパティリスナーを追加しています。コールバックでUIImagePickerControllerのtakePicture関数を呼び出したいとします。問題は、コールバックでピッカーにアクセスできないことです。Objective CオブジェクトがC関数で認識されない

私はviewDidLoadでピッカーを初期化しています。私は、プライベートオブジェクトとパブリックオブジェクトの両方としてピッカーを宣言しようとしましたが、pickerまたはself.pickerでアクセスしましたが、常に「宣言されていない識別子の使用」エラーが返されます。私は、リスナーを追加するには、このコードを使用します。

AudioSessionInitialize(nil, nil, nil, nil); 
AudioSessionSetActive(true); 
AudioSessionAddPropertyListener(
           kAudioSessionProperty_AudioRouteChange, 
           applicationAudioRouteDidChange, 
           self); 

これは私のコールバックです:

​​

私もこれが唯一のUIImagePickerControllerで問題だったかどうかを確認するためにNSArrayを宣言したが、配列はまた同じことを示しますエラー。

答えて

2

AudioSessionAddPropertyListener()の最後のパラメータがあるので、好きなものをコールバックに渡すことができます。

OSStatus AudioSessionAddPropertyListener (
     AudioSessionPropertyID   inID, 
     AudioSessionPropertyListener inProc, 
     void       *inClientData 
    ); 

あなたはvoid *inClientDataパラメータが自己がある方オブジェクトへのポインタであるコールバック内ので自己を渡しています。

自己その後、UIImagePickerControllerのインスタンスだった場合、

UIImagePickerController *picker = inClientData; 
[picker takePicture]; 
+0

自己が私のビューコントローラなので、私の場合は 'UIImagePickerController * myPicker =(RootViewController *)inClientData.picker; 'を使用します。あなたの方向は正しいです。 –

1

あなたのコールバックはObjective-CメソッドではなくC関数でなければなりません。これらは互換性がありません。 this linkを参照してください。

+0

私のコールバックは、その関数からObjective CのオブジェクトにアクセスしようとしているCの関数、イムです。 –

+0

に答える前に注意深く読んでください。うーん...私はそこに方法を見たと確信していました。ごめんなさい。したがって実際には、スコープに問題があります。あなたが渡している "自己"とは何ですか? –

+0

問題解決済み....受け入れられた答えを見てください。 '自己'はviewcontrollerクラスです –

関連する問題