Errore Swift 5.1: [plugin] AddInstanceForFactory: nessuna fabbrica registrata per ID <CFUUID


15

L'app si arresta in modo anomalo con il seguente messaggio di errore

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

Il punto di interruzione in caso di arresto anomalo sembra essere correlato a AVAudioPlayer

let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint

Risposte:


1

Ho trovato la soluzione in un altro thread di StackOverflow su AVAudioPlayer, eccolo:

Se inizializzi il tuo AVAudioPlayerlike

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()OPPURE wrongMusicPlayer = AVAudioPlayer()in qualsiasi metodo, rimuovilo e dichiaralo come var wrongMusicPlayer: AVAudioPlayer!


1
Non so perché .. ma ha funzionato .. Grazie.
Rafaela Lourenço,

9
NON è la soluzione, sfortunatamente.
Phil

Aggiungi un collegamento ai thread a cui si fa riferimento. Grazie.
HenryRoot, 2

1
qualcuno ha ancora trovato una soluzione a questo? avere lo stesso problema e questa risposta accettata non funziona per me
alionthego,

Non funziona anche per me
maddy110989

0

Credo che il messaggio di errore sia un avvertimento per i simulatori, quindi non è importante.

Penso che il tuo problema sia un bug nel tuo codice. Dovrebbe essere qualcosa del genere:

let path = Bundle.main.path(forResource: "menu_background", ofType:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint

Dove forResource è il nome del file e ofType è l'estensione. Puoi anche usare Bundle.main.url che sarà simile a questo:

let path = Bundle.main.url(forResource: "menu_background", withExtension:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint


0

È possibile utilizzare do / catch per evitare l'arresto anomalo ed esaminare l'eccezione o ignorare il problema insieme try?. Per me, questo è apparso solo nel simulatore quando ho chiamato:

try? AVAudioSession.sharedInstance().setCategory(.playback)

Penso che sia sicuro ignorarlo nel mio caso.


0

Credo che tutti voi potreste aver aggiunto AVFoundation all'elenco dei framework nella scheda Informazioni generali sul progetto.

Il codice erroneo era il seguente:

import SwiftUI
import AVFoundation

struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil
var audioPlayer: AVAudioPlayer

var body: some View {

E dopo che ho spostato la var audioPlayer: AVAudioPlayerdichiarazione subito dopo la linea di import AVFoundationlinea sembrava funzionare.

Quindi il seguente codice ha funzionato per me in un SwiftUIprogetto.

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")
            }
        }
    }
}

}

Inizialmente stavo seguendo questo tutorial di CodeWithChris e la sua discussione ha portato anche a cambiamenti di cui sopra. Controlla anche il seguente tutorial se hai bisogno di ulteriori esempi.

Spero che questo possa essere utile a qualcuno di voi là fuori!

Saluti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.