0

私のViewController名はMainviewcontrollerで、 AVAudioplayerのすべてのアクションを実行しています。

hファイルの場合、私はそうします

@class MainViewController;

@protocol MainViewControllerDelegate 

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)audioPlayer;

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)audioPlayer;

@end

@interface MainViewController : UIViewController <UIActionSheetDelegate, InfoDelegate, AVAudioPlayerDelegate> 

AVAudioPlayerDelegateまたはMainViewControllerDelegateを実行するはずの上記のステートメントで混乱しています

@protocolAVAudioPlayerDelegateを実行すると、 AVAudioPlayerの重複したプロトコル定義が無視されるという警告が黄色で表示されます

@protocolAVAudioPlayerを他のどこにも定義していない場合。

私が持っているもう1つの混乱は、これらのメソッドを最初にhファイルで宣言してからmファイルに実装することになっていることです

-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)audioPlayer;

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)audioPlayer;

助けてください。

4

1 に答える 1

2

ここで @protocol コンストラクトを誤用していると思います。@protocol ブロッ​​ク全体を削除して、クラスを実装するだけです。次のように、クラスが AVAudioPlayer のインスタンスのデリゲートであることを示す必要があります。

@interface MainViewController : UIViewController <UIActionSheetDelegate, InfoDelegate, AVAudioPlayerDelegate> 

次に、AVAudioPLayer オブジェクトをインスタンス化するときに、必ず MainViewController をデリゲートとして割り当ててください。

audioPlayInstance.delegate = self;

最後に、AVAudioPlayer インスタンスで呼び出したい 2 つのメソッドを実装します (上記では audioPlayInstance と呼びました)。これらをヘッダーではなく、.m ファイルに入れるだけで済みます。これらのメソッドのヘッダー宣言は、AVAudioPlayer.h クラス ファイルによって処理されます。

幸運を!

于 2012-05-09T18:09:37.543 に答える