web-dev-qa-db-fra.com

Crash d'iOS 13.1 dans AVAudioPlayer

Mon application se bloque sur iOS 13.1 lorsque je trace un problème, puis que l'application se bloque à cause de AVAudioPlayer.

Ci-dessous se trouve la configuration de mon lecteur.

if let wrongURL = Bundle.main.url(forResource: "wrongAudio", withExtension: "mp3")
        {
            do {
                wrongMusicPlayer = try AVAudioPlayer(contentsOf: wrongURL)
                wrongMusicPlayer.prepareToPlay()
            }
            catch
            {
                print(error.localizedDescription)
            }
        }

Ici Toutes les choses ont été trouvées correctement mais plantent lorsque AVAudioPlayer essaie de s'initialiser avec URL.

18
Rakesh Patel

J'ai trouvé un problème de plantage dans AVAudioPlayer avec iOS 13.1.

Voici la solution

Pourquoi mon AVAudioPlayer plante? car

J'initialise AVAudioPlayer comme

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()

puis j'essaye de réaffecter wrongMusicPlayer comme ci-dessous

wrongMusicPlayer = try AVAudioPlayer(contentsOf: wrongURL)

Et mon application se bloque.

Solution

Si vous initialisez votre AVAudioPlayer comme var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer() OR wrongMusicPlayer = AVAudioPlayer() dans n'importe quelle méthode, veuillez le supprimer et simplement déclarer comme var wrongMusicPlayer: AVAudioPlayer!.

40
Rakesh Patel

iOS 13.2, qui sera publié aujourd'hui, résout ce problème.

3
Andreas Stokidis

Merci, Rakesh! C'est incroyable! Mon jeu s'est cassé sur iPhone avec iOS 13.1.2. Mais dans le simulateur, cela fonctionne. Sur un appareil physique - non! J'ai lu beaucoup de forums, livres en ligne, documents, etc.

Et ce petit correctif m'a vraiment aidé: j'ai changé var player = AVAudioPlayer() en var player: AVAudioPlayer!

p.s. les gars ont écrit sur le problème avec les threads mais ce cas est plus simple

2
Eugene

Le même problème se produit avec le code Objective C.

Auparavant musicPlayer = [[AVAudioPlayer alloc] init]; fonctionnerait mais entraînera désormais un plantage dans iOS13. Le plantage se produit plus tard lors de l'utilisation de l'une des autres méthodes d'initialisation comme initWithContentsOfURL.

La suppression de [[AVAudioPlayer alloc] init] résout le problème.

1
Grant Luck