0
votes

"Thread1: erreur fatale: de manière inattendue trouvé nul tout en défaillant une valeur optionnelle"

1 Ce sont les fichiers WAV que j'ai utilisés

2 J'ai joint une capture d'écran de l'endroit où il lance cette erreur.

Voici ce que j'ai en ce moment. Je pensais que j'avais tout correct. Je sais que cela a quelque chose à voir avec l'utilisation d'une facultative mais pas sûre de la réparer. xxx


10 commentaires

Lorsque vous obtenez cette erreur, recherchez des marques d'exclamation (! ) qui signifie une facultative est d'être une force non emballée. Je pense que le chemin de vos sons est faux. En outre, vous définissez la même instance de lecteur audio sur chaque son, alors que seul le dernier restera. Essayez de régler le son dans chacune des actions des boutons.


Est-ce que cela répond à votre question? Qu'est-ce que "erreur fatale: de manière inattendue Nil tout en défaillant une valeur facultative "moyenne?


Si possible, pouvez-vous partager la capture d'écran de la ligne dans laquelle il se bloque.


Remplacer URL (FileURLWIPATHE: CATSOUND!) avec facultatif au lieu de forcer le débit. URL (FileRLWithPath: Catsound ?? "") . Forcer le déclenchement va crancer si sa valeur est nulle


Pouvez-vous également partager une capture d'écran des fichiers audio en xcode


vient de télécharger une capture d'écran des fichiers audio


Mon application ne se bloque plus grâce à vous, @sayooj, mais quand j'appuie sur les boutons, le son n'a pas joué. une idée pourquoi?


@Lindseymontgomery Le nom de la ressource dans le code doit être identique à celui de votre paquet. Dans votre code, vous avez fourni "CAT" tandis que le nom du fichier est "CAT" Soit CatSound = Bundle.Main.Path (Forresource: "CAT", OFTYPE: "WAV") . Pouvez-vous changer cela et essayer


@Sayooj omg im pleurer, ça a fonctionné. J'ai littéralement été bloqué sur ceci pendant 5 jours et j'ai eu une panne de mentl. Merci beaucoup!!!


Je mettrai à jour ma réponse avec les modifications, veuillez marquer la réponse comme acceptée.


3 Réponses :


0
votes

Une de vos ressources est nulle. Vous devriez vérifier si votre résorce est nul avant (avec force) le déballer: xxx

Faites ceci pour chaque ressource et utilisez le débogueur pour voir lequel est nul.


0 commentaires

1
votes

comme @chris et @Excitus mentionné, votre code complet ressemblerait.

class SecondViewController: UIViewController {

    var audioPlayer: AVAudioPlayer?
    override func viewDidLoad() {
      super.viewDidLoad()
    }

    @IBAction func cat(_ sender: Any)
    {
       if  let catSound = Bundle.main.path(forResource: "cat", ofType: "wav") {
           audioPlayer = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: catSound))
           audioPlayer?.play()
       }else {
        print("Cat File is missing")
       }

    }
    @IBAction func horse(_ sender: Any)
    {
       if  let horseSound = Bundle.main.path(forResource: "horse", ofType: "wav") {
          audioPlayer = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: horseSound))
          audioPlayer?.play()
       }else {
        print("Horse File is missing")
       }
    }


    @IBAction func dog(_ sender: Any)
    {
       if  let dogSound = Bundle.main.path(forResource: "dog", ofType: "wav") {
          audioPlayer = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: dogSound))
          audioPlayer?.play()
       }else {
        print("Dog File is missing")
       }
    }
    @IBAction func raccoon(_ sender: Any)
    {
       if  let raccoonSound = Bundle.main.path(forResource: "raccoon", ofType: "wav") {
          audioPlayer = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: raccoonSound))
          audioPlayer?.play()
       }else {
        print("Raccoon File is missing")
       }
   }}


0 commentaires

0
votes

Sensibilité de casse de cas. strong>

Les fichiers sont mocassés ("CAT") mais les chaînes de paramètres dans le code sont en hausse ("CAT"). La chaîne de paramètre et le nom du fichier doivent correspondre exactement. P>

Votre code n'est pas très utile de toute façon, car il écrase l'instance de lecteur audio trois fois dans ViewDidLoad p> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P > Une solution plus efficace consiste à créer une méthode pour charger le fichier et à lire le son et à utiliser l'API associé à URL de BUNDLE code>. P>

Le débordement de la force est bien parce que tous les fichiers Doit être dans le paquet à Heure de compilation forte>. Une erreur de design (fichier est manquante ou nom est mal calculé) peut être corrigé immédiatement. P>

class SecondViewController: UIViewController
{
    var audioPlayer: AVAudioPlayer!

    @IBAction func cat(_ sender: Any) {
        playSound(withName: "cat")
    }

    @IBAction func horse(_ sender: Any) {
        playSound(withName: "horse")
    }

    @IBAction func dog(_ sender: Any) {
        playSound(withName: "dog")
    }

    @IBAction func raccoon(_ sender: Any){
        playSound(withName: "raccoon")
    }

    func playSound(withName name : String) {
        let sound = Bundle.main.url(forResource: name, withExtension: "wav")!
        audioPlayer = try! AVAudioPlayer(contentsOf: sound)
        audioPlayer.play()
    }
}


0 commentaires