如何创buildAVPlayer单例类

我使用AVPlayer播放歌曲从urls,我初始化和分配它在我的viewcontroller,现在我有一个问题,当我导航到另一个视图控制器,并回到主播放器播放歌曲细节和滑块更新应保持,但问题是当我导航到主播放器再次播放细节和滑块更新没有发生,但歌曲不断播放。 我怎样才能避免这一点,任何人都可以给我一些例子。 我是否需要创build一个单例类,如果是的话,如何创build一个单例类的AVPlayer

谢谢

解决scheme1:您还应该在PlayerViewController的viewWillAppear中更新UI。 由于您不会从您的PlayerViewController返回或取消分配,Song继续播放。 如果您popup或closuresPlayerViewController,则此解决scheme将无法工作。

解决scheme2:创build一个具有AVAudioPlayer实例的单例类。 例如

MediaManager.h

 @interface MediaManager : NSObject{ } +(MediaManager *)sharedInstance; -(void)playWithURL:(NSURL *)url; -(float)currentPlaybackTime; @end 

MediaManager.m

 static MediaManager *sharedInstance = nil; @interface MediaManager (){ AVAudioPlayer *audioPlayer; } @end @implementation MediaManager -(id)init{ if(self = [super init]){ } return self; } +(MediaManager *)sharedInstance{ //create an instance if not already else return if(!sharedInstance){ sharedInstance = [[[self class] alloc] init]; } return sharedInstance; } -(void)playWithURL:(NSURL *)url{ NSError *error = nil; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; if(error == nil){ [audioPlayer play]; } } -(float)currentPlaybackTime{ return audioPlayer.currentTime; } @end 

在其中添加其他必要的方法,如“stopPlayer”等

示例方法调用

 [[MediaManager sharedInstance] playWithURL:url]; float currentTime = [[MediaManager sharedInstance] currentPlaybackTime]; // Update slider