In questa linea
appDelegate.audioPlayer = [[AVPlayer alloc] init];
Sembra che tu stia assegnando e iniziando un nuovo Avplayer. In quanto tale non sorprende che tu ottenga un risultato "non suonare". Lascia semplicemente fuori quella linea.
Domanda
Ho una tabella delle canzoni sul dispositivo iOS e se seleziono una riga, spingo a una nuova vista in cui Avplayer inizia a suonare la canzone selezionata. Ora se torno indietro e seleziono un'altra riga, spingendo alla vista l'app inizierà a suonare la nuova canzone, mentre continua a suonare quella che era già in esecuzione.
EDIT: ho provato a usare il valore di velocità come questo senza successo, in quanto emetterà sempre "non suonare" se lo metto nel mio metodo ViewDidload, anche se una canzone suona:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
appDelegate = (SimpleTableAppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.audioPlayer = [[AVPlayer alloc] init];
if (appDelegate.audioPlayer.rate == 0.0f)
{
NSLog(@"not playing");
} else {
NSLog(@"already playing");
}
}
Soluzione
In questa linea
appDelegate.audioPlayer = [[AVPlayer alloc] init];
Sembra che tu stia assegnando e iniziando un nuovo Avplayer. In quanto tale non sorprende che tu ottenga un risultato "non suonare". Lascia semplicemente fuori quella linea.
Altri suggerimenti
Avplayer ha un rate
Proprietà che indica la velocità della riproduzione come galleggiante. 0.0f
indica fermato. Il play
e stop
metodi semplicemente cambiano il rate
proprietà.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
appDelegate = (SimpleTableAppDelegate *)[[UIApplication sharedApplication] delegate];
//Stop potential existing audioPlayer prior to creating new player
[appDelegate.audioPlayer stop];
//Create new audio player
appDelegate.audioPlayer = [[AVPlayer alloc] init];
}