問題をトレースすると、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)
}
}
ここではすべてが正しく検出されましたが、AVAudioPlayer
がURL
で初期化しようとするとクラッシュします。
IOS 13.1のAVAudioPlayer
にクラッシュの問題が見つかりました。
ここに解決策があります
なぜAVAudioPlayer
がクラッシュするのですか?なぜなら
私はAVAudioPlayer
を
var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()
そして私は以下のようにwrongMusicPlayer
を再割り当てしようとします
wrongMusicPlayer = try AVAudioPlayer(contentsOf: wrongURL)
そして、私のアプリがクラッシュします。
ソリューション
AVAudioPlayer
をvar wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()
OR wrongMusicPlayer = AVAudioPlayer()
のように初期化する場合は、メソッドを削除してvar wrongMusicPlayer: AVAudioPlayer!
のように宣言してください。
本日リリースされたiOS 13.2では、この問題が修正されています。
ありがとう、Rakesh!すごい! iOS 13.1.2を搭載したiPhoneでゲームが壊れました。しかし、シミュレータではそれが機能します。物理デバイス-いいえ!私は多くのフォーラム、オンラインブック、ドキュメントなどを読みました。
そして、この小さな修正が本当に役に立ちました:var player = AVAudioPlayer()
をvar player: AVAudioPlayer!
に変更しました
pS男はスレッドの問題について書いたが、このケースはより簡単です
Objective Cコードでも同じ問題が発生します。
以前はmusicPlayer = [[AVAudioPlayer alloc] init];動作しますが、iOS13でクラッシュが発生します。クラッシュは、後でinitWithContentsOfURLなどの他のinitメソッドのいずれかを使用するときに発生します。
[[AVAudioPlayer alloc] init]を削除すると問題が修正されます。