Erreur Swift 5.1: [plug-in] AddInstanceForFactory: aucune fabrique enregistrée pour l'ID <CFUUID


15

L'application se bloque avec le message d'erreur suivant

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

Le point d'arrêt au crash semble être lié à AVAudioPlayer

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

Réponses:


1

J'ai trouvé la solution dans un autre thread stackoverflow sur AVAudioPlayer, le voici:

Si vous initialisez votre AVAudioPlayercomme

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


1
Je ne sais pas pourquoi .. mais ça a fonctionné .. Merci.
Rafaela Lourenço

9
PAS la solution, malheureusement.
Phil

Veuillez ajouter un lien vers les fils de discussion mentionnés. THX.
HenryRootTwo

1
quelqu'un a-t-il déjà trouvé une solution à cela? ayant le même problème et cette réponse acceptée ne fonctionne pas pour moi
alionthego

Ne fonctionne pas aussi pour moi
maddy110989

0

Je crois que le message d'erreur est un avertissement pour les simulateurs, il n'est donc pas important.

Je pense que votre problème est un bug dans votre code. Devrait être quelque chose comme ça:

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

forResource est le nom du fichier et ofType est l'extension. Vous pouvez également utiliser Bundle.main.url qui ressemblera à ceci:

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


0

Vous pouvez utiliser do / catch pour éviter le plantage et examiner l'exception, ou ignorer le problème avec try?. Pour moi, cela n'apparaissait que dans le simulateur lors de l'appel:

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

Je pense qu'il est prudent de l'ignorer dans mon cas.


0

Je pense que vous avez peut-être tous ajouté AVFoundation à la liste des cadres dans l'onglet Informations générales sur le projet.

Le code erroné était le suivant:

import SwiftUI
import AVFoundation

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

var body: some View {

Et après avoir déplacé la var audioPlayer: AVAudioPlayerdéclaration juste après la ligne import AVFoundation, elle semblait fonctionner.

Le code suivant a donc fonctionné pour moi dans un SwiftUIprojet.

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

}

Je suivais initialement ce tutoriel de CodeWithChris et sa discussion a également conduit au changement ci-dessus. Consultez également le didacticiel suivant si vous avez besoin d'autres exemples.

J'espère que cela sera utile à quelqu'un d'entre vous!

À votre santé!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.