2015-03-16 3 views
7

Ich versuche eine MP3-Datei abzuspielen (funktioniert bei Wiedergabe über VLC/iTunes), wenn eine Taste gedrückt wird. Hier ist mein Code:OSStatus-Fehler 2003334207 bei Verwendung von AVAudioPlayer

 var audioPlayer: AVAudioPlayer! 
    @IBAction func playEpisode(sender: AnyObject) { 
    println("now playing") 
    let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0) 
    let data: CDEpisode = fetchedResultsController.objectAtIndexPath(indexPath!) as! CDEpisode 
    var err: NSError? 
    let url = NSURL(string: data.localPath) 
    println("The url is \(url)") 

    audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &err) 
    if audioPlayer == nil { 
     if let e = err { 
      println(e.localizedDescription) 
     } 
    } 
    audioPlayer.delegate = self 
    audioPlayer.prepareToPlay() 
    audioPlayer.play() 
} 

Hier wird das Protokoll:

now playing 
The url is Optional(file:///var/mobile/Containers/Data/Application/4747A71E-A63F-4EFC-B2DF-8B361361080B/Documents/serial-s01-e12.mp3) 
The operation couldn’t be completed. (OSStatus error 2003334207.) 
fatal error: unexpectedly found nil while unwrapping an Optional value 

Die EXC_BREAKPOINT geschieht auf der audioPlayer.delegate = self.

Andere Themen auf StackoOverflow helfen nicht. Irgendwelche Ideen? Dank

bearbeiten: Ich habe versucht, eine localURL zu contentsOfURL vorbei (anstelle eines CDEpisode Objekt) und es immer noch nicht.

+0

hilft mir den Fehlercode nachgeschlagen, und 2003334207 gibt die lokalisierteDescription "Die Operation konnte nicht abgeschlossen werden". In meiner App habe ich versucht, auf eine Datei zuzugreifen, die nicht existiert. – Unome

Antwort

2

Es sieht so aus, als ob Sie versuchen, eine Variable mit einem Nullwert auszupacken. Sie sollten Ihre Variablen sicher auspacken, um dies zu verhindern.

if let data: CDEpisode = fetchedResultsController.objectAtIndexPath(indexPath!) as! CDEpisode 
{ 
    var err: NSError? 
    let url = NSURL(string: data.localPath) 
    println("The url is \(url)") 

    //rest of code 
} 

Sie noch brauchen, um herauszufinden, warum es null zurückkehrt, aber das ist ein sicherer Weg, Variablen auszupacken und zu verhindern, Absturz, da es müssten mehr Kontext sein, um dieses Problem zu beheben.

Einige Fragen zu prüfen:

  • Bist Du sicher das fetchedResultsController bei ein Objekt zurückgibt alle?
  • Sind Sie sicher, dass es CDEpisode ist?
+0

Danke, du hast Recht. Die App löst immer noch den gleichen Fehler aus. Die abgerufeneResultsController gibt das richtige Objekt vom Typ CDEpisode zurück. – user2747220

+0

In meiner CoreData-Datenbank ist ein Fehler aufgetreten. Dies ist jetzt behoben. Danke an Sie und @dan – user2747220

2

Sie überprüfen, ob audioPlayernil ist aber dann gehen Sie auf, es zu benutzen, als ob es nicht ohnehin war. Sie möchten wahrscheinlich so etwas wie:

Und etwas tun, um tatsächlich den Fehlerfall zu behandeln, anstatt nur den Fehler zu drucken.

+0

Sie sind absolut richtig. Dies ist nur improvisierter Code und nicht endgültig. Ich habe eine Else-Anweisung hinzugefügt, und es stürzt die App nicht mehr ab, aber es löst immer noch den gleichen Fehler aus. – user2747220

0

In meinem Fall ich hatte das gleiche Problem und ich fand heraus, dass ich beginnen diese vor setzen benötigen Aufnahme

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) 

Hoffen, dass es jemand