当视图控制器倒退时iOS音频停止播放

问题描述:

我在导航控制器中有两个视图控制器。我从第一个视图控制器转到第二个视图控制器,并在第二个视图控制器中播放音频。但是,当我按下后退按钮返回到第一个视图控制器时,音频停止播放。下面当视图控制器倒退时iOS音频停止播放

是音频播放类:

@interface AudioPlayer() 
@property AVAudioSession *audioSession; 
@property AVAudioPlayer *audioPlayer; 
@property BOOL audioPlaying; 
@property BOOL audioInterrupted; 
@end 

@implementation AudioPlayer 

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     [self configureAudioSession]; 
     [self configureAudioPlayer]; 
    } 
    return self; 
} 

- (void)tryPlayMusic { 
    [_audioPlayer prepareToPlay]; 
    [_audioPlayer play]; 
    _audioPlaying = YES; 
} 

- (void) configureAudioSession { 
    // Implicit initialization of audio session 
    self.audioSession = [AVAudioSession sharedInstance]; 
    NSError *setCategoryError = nil; 
    [self.audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError]; 

    if (setCategoryError) { 
     NSLog(@"Error setting category! %ld", (long)[setCategoryError code]); 
    } 
} 

- (void)configureAudioPlayer { 
    // Create audio player with background music 
    NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"bigbigworld" ofType:@"mp3"]; 
    NSURL *audioURL = [NSURL fileURLWithPath:audioPath]; 
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil]; 
    _audioPlayer.numberOfLoops = -1; // Negative number means loop forever 
} 
@end 

,因为你在第二控制器属性创建audioPlayer。当弹出时,系统将释放第二个控制器,第二个控制器的任何属性将被释放。

如果要继续播放,可以通过将第二个控制器分配为第一个控制器的强属性,从第一个控制器创建强参考点。

或者您可以在第一个控制器或导航控制器中简单地播放控制器,第二个需要播放音频时,可以将代表呼叫到第一个控制器或导航控制器。这样,请注意,您的委托属性是弱属性,以避免强参考周期

我想你在第二个视图控制器中处理AudioPlayer

当您从第二个视图控制器返回时,AudioPlayer是dealloc。所以你应该在某个地方处理它(而不是在第二个视图控制器中)