アプリが次のエラーメッセージでクラッシュする
2019-10-12 20:01:34.332334-0700 Awesome App[26368:3535170] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x600002903280> F8BB1C28-BAE8-11D6-9C31-00039315CD46
クラッシュ時のブレークポイントはAVAudioPlayerに関連しているようです
let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint
私はAVAudioPlayerに関する別のstackoverflowスレッドで解決策を見つけました、ここにあります:
AVAudioPlayer
を初期化すると
var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()
OR wrongMusicPlayer = AVAudioPlayer()
どのメソッドでも削除して、var wrongMusicPlayer: AVAudioPlayer
!のように宣言してください。
皆さん全員がAVFoundationをProject General Infoタブのフレームワークリストに追加したと思います。
誤ったコードは次のとおりです。
import SwiftUI
import AVFoundation
struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil
var audioPlayer: AVAudioPlayer
var body: some View {
var audioPlayer: AVAudioPlayer
宣言をimport AVFoundation
行の直後に移動した後、機能しているように見えました。
したがって、次のコードはSwiftUI
プロジェクトで機能しました。
import SwiftUI
import AVFoundation
var audioPlayer: AVAudioPlayer!
struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil
var body: some View {
VStack {
Button("Play the Downloaded Track") {
if let downloadedPath = self.downloadedFilePath?.path, FileManager().fileExists(atPath: downloadedPath) {
do {
audioPlayer = try AVAudioPlayer(contentsOf: self.downloadedFilePath!)
guard let player = audioPlayer else { return }
player.prepareToPlay()
player.play()
} catch let error {
print(error.localizedDescription)
}
} else {
print("The file doesn not exist at path || may not have been downloaded yet")
}
}
}
}
}
私は最初に CodeWithChris のこのチュートリアルに従っていましたが、その議論も上記の変更につながりました。さらに例が必要な場合は、 次のチュートリアル もチェックアウトしてください。
これがあなたの誰かに役立つことを願っています!
乾杯!
Do/catchを使用してクラッシュを回避し、例外を調査するか、_try?
_と一緒に問題をすべて無視できます。私にとって、これは呼び出すときにシミュレータにのみ表示されていました:
try? AVAudioSession.sharedInstance().setCategory(.playback)
私の場合は無視しても安全だと思います。
エラーメッセージはシミュレータの警告であるため、重要ではありません。
あなたの問題はあなたのコードのバグだと思います。このようなものでなければなりません:
let path = Bundle.main.path(forResource: "menu_background", ofType:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint
forResourceはファイルの名前で、ofTypeは拡張子です。次のようなBundle.main.urlを使用することもできます。
let path = Bundle.main.url(forResource: "menu_background", withExtension:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint