web-dev-qa-db-ja.com

AVAudioPlayerでのiOS 13.1のクラッシュ

問題をトレースすると、iOS 13.1でアプリがクラッシュし、AVAudioPlayerが原因でアプリがクラッシュします。

以下は私のプレーヤーの設定です。

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

ここではすべてが正しく検出されましたが、AVAudioPlayerURLで初期化しようとするとクラッシュします。

18
Rakesh Patel

IOS 13.1のAVAudioPlayerにクラッシュの問題が見つかりました。

ここに解決策があります

なぜAVAudioPlayerがクラッシュするのですか?なぜなら

私はAVAudioPlayer

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()

そして私は以下のようにwrongMusicPlayerを再割り当てしようとします

wrongMusicPlayer = try AVAudioPlayer(contentsOf: wrongURL)

そして、私のアプリがクラッシュします。

ソリューション

AVAudioPlayervar wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer() OR wrongMusicPlayer = AVAudioPlayer()のように初期化する場合は、メソッドを削除してvar wrongMusicPlayer: AVAudioPlayer!のように宣言してください。

40
Rakesh Patel

本日リリースされたiOS 13.2では、この問題が修正されています。

3

ありがとう、Rakesh!すごい! iOS 13.1.2を搭載したiPhoneでゲームが壊れました。しかし、シミュレータではそれが機能します。物理デバイス-いいえ!私は多くのフォーラム、オンラインブック、ドキュメントなどを読みました。

そして、この小さな修正が本当に役に立ちました:var player = AVAudioPlayer()var player: AVAudioPlayer!に変更しました

pS男はスレッドの問題について書いたが、このケースはより簡単です

2
Eugene

Objective Cコードでも同じ問題が発生します。

以前はmusicPlayer = [[AVAudioPlayer alloc] init];動作しますが、iOS13でクラッシュが発生します。クラッシュは、後でinitWithContentsOfURLなどの他のinitメソッドのいずれかを使用するときに発生します。

[[AVAudioPlayer alloc] init]を削除すると問題が修正されます。

1
Grant Luck