0

我的ViewController名称是Mainviewcontroller,我在其中执行 AVAudioplayer 的所有操作

如果在 h 文件中我做

@class MainViewController;

@protocol MainViewControllerDelegate 

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

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

@end

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

我对上述声明感到困惑,我应该做AVAudioPlayerDelegateMainViewControllerDelegate

如果我这样做@protocolAVAudioPlayerDelegate,那么我会收到黄色警告,指出 AVAudioPlayer 的重复协议定义被忽略

当我没有在其他任何地方定义@protocolAVAudioPlayer时。

我的另一个困惑是我应该先在 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 实例上调用的两个方法(我在上面将其称为 audioPlayInstance)。您只需要将它们放在您的 .m 文件中,而不是您的标题中。这些方法的标头声明由 AVAudioPlayer.h 类文件处理。

祝你好运!

于 2012-05-09T18:09:37.543 回答